第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能用 `copy()` 復(fù)制切片?

為什么我不能用 `copy()` 復(fù)制切片?

Go
qq_遁去的一_1 2021-10-04 17:18:41
我需要在 Go 中制作一個切片的副本并閱讀文檔,我可以使用復(fù)制功能。copy 內(nèi)置函數(shù)將元素從源切片復(fù)制到目標(biāo)切片。(作為一種特殊情況,它還會將字節(jié)從字符串復(fù)制到字節(jié)切片。)源和目標(biāo)可能重疊。Copy 返回復(fù)制的元素?cái)?shù),這將是 len(src) 和 len(dst) 中的最小值。但是當(dāng)我這樣做時(shí):arr := []int{1, 2, 3}tmp := []int{}copy(tmp, arr)fmt.Println(tmp)fmt.Println(arr)我tmp的和以前一樣是空的(我什至嘗試使用arr, tmp):[][1 2 3]你可以在 go playground上查看。那么為什么我不能復(fù)制切片呢?
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個贊

內(nèi)置copy(dst, src)復(fù)制min(len(dst), len(src))元素。


因此,如果您的dst值為空 ( len(dst) == 0),則不會復(fù)制任何內(nèi)容。


嘗試tmp := make([]int, len(arr))(去游樂場):


arr := []int{1, 2, 3}

tmp := make([]int, len(arr))

copy(tmp, arr)

fmt.Println(tmp)

fmt.Println(arr)

輸出(如預(yù)期):


[1 2 3]

[1 2 3]

不幸的是,這在builtin包中沒有記錄,但在Go Language Specification: Appending to and copying slices 中有記錄:


復(fù)制的元素的數(shù)目是最小len(src)和len(dst)。


編輯:


最后,文檔copy()已更新,現(xiàn)在包含將復(fù)制源和目標(biāo)的最小長度的事實(shí):


Copy 返回復(fù)制的元素?cái)?shù),這將是len(src) 和 len(dst) 中的最小值。


查看完整回答
反對 回復(fù) 2021-10-04
?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個贊

如果您的切片大小相同,它將起作用:


arr := []int{1, 2, 3}

tmp := []int{0, 0, 0}

i := copy(tmp, arr)

fmt.Println(i)

fmt.Println(tmp)

fmt.Println(arr)

會給:


3

[1 2 3]

[1 2 3]

來自“ Go Slices:用法和內(nèi)部結(jié)構(gòu)”:


復(fù)制功能支持在不同長度的切片之間進(jìn)行復(fù)制(它只會復(fù)制到較少數(shù)量的元素)


通常的例子是:


t := make([]byte, len(s), (cap(s)+1)*2)

copy(t, s)

s = t


查看完整回答
反對 回復(fù) 2021-10-04
  • 3 回答
  • 0 關(guān)注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號