作者 主題: [Golang] built-in function copy  (閱讀 730 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4905
    • 檢視個人資料
    • http://www.ecmagic.com
[Golang] built-in function copy
« 於: 2015-09-06 00:17 »
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