Golang 如何将一个切片复制到另一个切片

Golang 如何将一个切片复制到另一个切片

切片是一种可变长度的序列,可存储相似类型的元素,不允许在同一切片中存储不同类型的元素。在切片中,您可以使用Go语言提供的 copy() 函数将一个切片复制到另一个切片。或者换句话说,copy()函数允许您将一个切片的元素复制到另一个切片中。

语法:

func copy(dst, src []Type) int

在这里, dst 表示目标切片, src 表示源切片。它将返回被复制的元素数,即 len(dst)len(src) 的最小值。让我们通过以下示例进行讨论:

示例1:

// Go程序展示如何使用
//copy函数将切片复制到另一个切片
package main

import "fmt"


// Main方法
func main() {

//创建切片
slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65}

var slc2 []int
slc3 := make([]int, 5)
slc4 := []int{78, 50, 67, 77}

// 复制之前
fmt.Println("Slice_1:", slc1)
fmt.Println("Slice_2:", slc2)
fmt.Println("Slice_3:", slc3)
fmt.Println("Slice_4:", slc4)

// 复制切片
copy_1 := copy(slc2, slc1)
fmt.Println("\nSlice:", slc2)
fmt.Println("总共复制的元素数:", copy_1)

copy_2 := copy(slc3, slc1)
fmt.Println("\nSlice:", slc3)
fmt.Println("总共复制的元素数:", copy_2)

copy_3 := copy(slc4, slc1)
fmt.Println("\nSlice:", slc4)
fmt.Println("总共复制的元素数:", copy_3)

// 不要被搞混了,在上面的
// 代码行中,slc4已经被复制
// 因此永久修改,即。
// slc 4包含[58 69 40 45]
copy_4 := copy(slc1, slc4)
fmt.Println("\nSlice:", slc1)
fmt.Println("总共复制的元素数:", copy_4)
} 

输出:

Slice_1: [58 69 40 45 11 56 67 21 65]
Slice_2: []
Slice_3: [0 0 0 0 0]
Slice_4: [78 50 67 77]

Slice: []
总共复制的元素数: 0

Slice: [58 69 40 45 11]
总共复制的元素数: 5

Slice: [58 69 40 45]
总共复制的元素数: 4

Slice: [58 69 40 45 11 56 67 21 65]
总共复制的元素数: 4

解释: 在上面的示例中,我们有四个整型切片,我们在它们上执行复制操作:

  • copy_1:= copy(slc2, slc1): 在这里, slc2 是目标切片, slc1 是源切片。当我们尝试将 slc1 切片复制到空的 slc2 切片中时,复制方法将返回源切片和目标切片长度的最小值,在空切片 slc2 中最小值为 0。
  • copy_2:= copy(slc3, slc1): 在这里, slc3 是目标切片, slc1 是源切片。当我们尝试使用 copy() 函数将 slc1 切片复制到空的 slc3 切片中时,它仅复制了从 index 0 开始的 5 个元素,因为该切片的长度为 5,所以它无法存储大于 5 的元素。
  • copy_3:= copy(slc4, slc1): 在这里, slc4 是目标切片, slc1 是源切片。当我们试图使用 copy() 函数将 slc1 切片复制到 slc4 切片中时,它只复制了从 index 0 开始的 4 个元素。这是因为 slc4 切片的长度为 4,所以它无法存储大于 4 的元素。
  • copy_4:= copy(slc1, slc4): 在此之后,您可能会被输出所迷惑。请注意,代码行中的 slc4 已经更新。现在考虑更新后的值作为 slc4 的值。现在, slc4 有 4 个元素, slc1 有 9 个元素。所以,复制的总元素数量为 4。

示例 2:

// Go 程序演示如何使用 copy 函数将一个切片复制到另一个切片中
package main
 
    import "fmt"
 
    func main() {
 
        // 源切片
        slice_1: = [] string {"Geeks", "for", "Geeks", "GFG"}
 
        // 使用 make 函数创建目标切片
        slice_2: = make([] string, 3)
 
            // 复制之前
            fmt.Println("Slice_1: ", slice_1)
                fmt.Println("Slice_2: ", slice_2)
 
            // 使用 copy 函数将 slice_1 复制到 slice_2 中
            Copy_1: = copy(slice_2, slice_1)
                fmt.Println("\nSlice_1: ", slice_1)
                    fmt.Println("Slice_2: ", slice_2)
                        fmt.Println(
                            "复制的元素数量: ",Copy_1)
 
            // 使用 copy 函数复制切片
// 请查看代码 
        Copy_2: = copy(slice_1, [] string {"123geeks", "gfg"})
            fmt.Println("\nSlice_1: ", slice_1)
                fmt.Println(
                    "复制的元素数量: ",
                    Copy_2)
    } 

输出结果:

Slice_1:  [Geeks for Geeks GFG]
Slice_2:  [  ]

Slice_1:  [Geeks for Geeks GFG]
Slice_2:  [Geeks for Geeks]
复制的元素数量:  3

Slice_1:  [123geeks gfg Geeks GFG]
复制的元素数量: 2

Go 中,要将一个切片复制到另一个切片中,可以使用内置函数 copy。copy 函数接受两个参数:目标切片和源切片,并将源切片的元素复制到目标切片中。

这是一个演示如何在 Go 中将一个切片复制到另一个切片的示例:

package main
 
import "fmt"
 
func main() {
    source := []int{1, 2, 3, 4, 5}
    destination := make([]int, len(source))
    copy(destination, source)
 
    fmt.Println("Source: ", source)
    fmt.Println("Destination: ", destination)
} 

输出 :

源数组: [1 2 3 4 5]
目标数组: [1 2 3 4 5]

在这个例子中,通过1、2、3、4、5创建了一个切片源(source)。通过调用make函数创建的slice目标数组(destination) 与源slice长度相同,并初始化为0。然后调用copy函数,以目标数组和源数组作为参数,将元素从源数组复制到目标数组。

重要提示,目标数组的长度必须等于或大于源数组的长度,否则copy函数会出错。如果目标数组的长度大于源数组的长度,则目标数组中剩余的元素将保持不变。

切片复制是Go中常见的操作,copy函数提供了一种简单高效的方式来复制切片。 它在Go程序中广泛应用,用于将切片复制为多种目的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程