个性化阅读
专注于IT技术分析

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

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

语法如下:

func copy(dst, src []Type) int

这里, dst代表目标切片, 并且src表示源切片。它将返回复制的元素数量, 即最少len(dst)orlen(src)。让我们借助给定的示例进行讨论:

范例1:

// Go program to illustrate how to copy 
// a slice into another slice using the
// copy function
package main
  
import "fmt"
  
// Main Method
func main() {
  
     // Creating slices
     slc1 := [] int {58, 69, 40, 45, 11, 56, 67, 21, 65}
     var slc2 [] int
     slc3 := make([] int , 5)
     slc4 := [] int {78, 50, 67, 77}
  
     // Before copying
     fmt.Println( "Slice_1:" , slc1)
     fmt.Println( "Slice_2:" , slc2)
     fmt.Println( "Slice_3:" , slc3)
     fmt.Println( "Slice_4:" , slc4)
  
     // Copying the slices
     copy_1 := copy(slc2, slc1)
     fmt.Println( "\nSlice:" , slc2)
     fmt.Println( "Total number of elements copied:" , copy_1)
  
     copy_2 := copy(slc3, slc1)
     fmt.Println( "\nSlice:" , slc3)
     fmt.Println( "Total number of elements copied:" , copy_2)
  
     copy_3 := copy(slc4, slc1)
     fmt.Println( "\nSlice:" , slc4)
     fmt.Println( "Total number of elements copied:" , copy_3)
  
     // Don't confuse here, because in above 
     // line of code the slc4 has been copied 
     // and hence modified permanently i.e. 
     // slc 4 contains [58 69 40 45]
     copy_4:= copy(slc1, slc4)
     fmt.Println( "\nSlice:" , slc1)
     fmt.Println( "Total number of elements copied:" , 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: []
Total number of elements copied: 0

Slice: [58 69 40 45 11]
Total number of elements copied: 5

Slice: [58 69 40 45]
Total number of elements copied: 4

Slice: [58 69 40 45 11 56 67 21 65]
Total number of elements copied: 4

说明:在上面的示例中, 我们有四个整数类型切片, 并对它们执行复制操作:

  • copy_1:=copy(slc2, slc1):这里, slc2是目标切片, 并且slc1是源切片。这里, slc2是我们尝试复制时的零切片slc1切入slc2切片, 然后复制方法将返回源切片和目标切片的最小长度, 对于空切片slc2, 该长度为零。
  • copy_2:=copy(slc3, slc1):这里, slc3是目标切片, 并且slc1是源切片。在这里slc3slice是空切片, 因此当我们尝试复制时slc1切成slc3使用copy()函数, 它仅从中复制5个元素slc1从索引0开始的切片, 因为此切片的长度为5, 所以它不能存储大于5的元素。
  • copy_3:=copy(slc4, slc1):这里, slc4是目标切片, 并且slc1是源切片。当我们尝试复制slc1切成slc4slice使用copy()函数从索引0开始仅复制4个元素。因为slc4slice是4, 因此不能存储超过4个元素。
  • copy_4:=copy(slc1, slc4):在这里, 你可能会对它的输出感到困惑。看到, slc4上面的代码行已更新。所以现在考虑更新的值slc4。所以现在slc4有4个元素和slc1有9个元素。因此, 将要复制的元素总数为4。

范例2:

// Go program to illustrate how to copy 
// a slice into another slice using the
// copy function
package main
  
import "fmt"
  
func main() {
  
     // source slice
     slice_1 := []string{ "Geeks" , "for" , "Geeks" , "GFG" }
  
     // creating destination slice
     // using make function
     slice_2 := make([]string, 3)
  
     // Before Copying
     fmt.Println( "Slice_1: " , slice_1)
     fmt.Println( "Slice_2: " , slice_2)
  
     // Copying slice_1 into slice_2
     // using copy function
     Copy_1 := copy(slice_2, slice_1)
     fmt.Println( "\nSlice_1: " , slice_1)
     fmt.Println( "Slice_2: " , slice_2)
     fmt.Println( "Number of elements copied: " , Copy_1)
  
     // Copying the slice
     // using copy function
     // see the code clearly
     Copy_2 := copy(slice_1, []string{ "123geeks" , "gfg" })
     fmt.Println( "\nSlice_1 : " , slice_1)
     fmt.Println( "Number of elements copied:" , Copy_2)
  
}

输出如下:

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

Slice_1:  [Geeks for Geeks GFG]
Slice_2:  [Geeks for Geeks]
Number of elements copied:  3

Slice_1:  [123geeks gfg Geeks GFG]
Number of elements copied: 2

赞(0)
未经允许不得转载:srcmini » 如何在Golang中将一个切片复制到另一个切片中?

评论 抢沙发

评论前必须登录!