技術討論區 > 程式討論版

[Golang] built-in function copy

(1/1)

Yamaka:
Go 的內建函數,針對 slice 做資料複製,類似 c 的 memcpy

原型:


--- 代碼: ---func copy(dst, src []Type) int
--- 程式碼結尾 ---

如果成功複製會傳回複製的個數

dst src 可以在同一個 slice 內操作

dst src 可以指定開始與結束的位置


--- 代碼: ---copy(a1[5:6], a1[8:])
/*
result: a1: [1 3 5 7 9 19 13]
src 指定要複製8開始到最後,但是 dst 指定只能複製到第5的位置,因此只有複製 19 過來
*/
--- 程式碼結尾 ---

copy 常用在移除元素(remove elements)
下面註解的部分是在同一個 slice 操作
a3 則是建立新的 slice 存放結果

Code:

--- 代碼: ---  a1 := []int{1, 3, 5, 7, 9, 11, 13, 17, 19, 23}
  a2 := make([]int, 15, 30)
  fmt.Println("a1:", a1)
  fmt.Println("a2:", a2)

  copy(a2[10:], a1)
  fmt.Println("a2:", a2)

  //remove 11, 13, 17
  //copy(a1[5:], a1[8:])
  //a1 = a1[:7]
 
  a3 := make([]int, 7)
  copy(a3[:5], a1)
  copy(a3[5:], a1[8:])
  fmt.Println("a3:", a3)
--- 程式碼結尾 ---


Result:

--- 引用 ---a1: [1 3 5 7 9 11 13 17 19 23]
a2: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
a2: [0 0 0 0 0 0 0 0 0 0 1 3 5 7 9]
a3: [1 3 5 7 9 19 23]
--- 引用結尾 ---

http://play.golang.org/p/6MQcr5lu7t

導覽

[0] 文章列表

前往完整版本