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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

刪除切片中的元素

刪除切片中的元素

Go
一只名叫tom的貓 2023-03-29 15:17:46
Go 不提供任何高級(jí)函數(shù)來(lái)從切片中刪除元素。我編寫了一個(gè)函數(shù),以此處通常建議的方式從切片中刪除給定值,但它產(chǎn)生了意想不到的結(jié)果。package mainimport "fmt"type Area struct {    Cells [2][]uint8}func main() {    var area1 Area    area1.Cells[1] = []uint8 {5, 6, 7}    area2 := area1    area1.Cells[1] = removeValueFromCell(area1.Cells[1], 6)    fmt.Println(area1.Cells[1])    fmt.Println(area2.Cells[1])}func removeValueFromCell(cell []uint8, value uint8) []uint8{    var res = cell    for i := 0; i < len(cell); i++ {        if cell[i] == value {            res = append(cell[:i], cell[i+1:]...)        }    }    return res}該程序輸出:[5 7] <- as expected[5 7 7] <- why not [5 6 7] or [5 7] ?
查看完整描述

1 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

切片值只是標(biāo)頭,指向后備數(shù)組。切片頭只包含指針。所以當(dāng)你復(fù)制一個(gè)切片值時(shí),副本也會(huì)指向同一個(gè)后備數(shù)組。因此,如果您通過(guò)原始切片標(biāo)頭更改支持?jǐn)?shù)組,則副本也會(huì)觀察到更改。

這就是你的情況。你分配area1area2.?單元格是一個(gè)切片數(shù)組。因此將復(fù)制數(shù)組,其中包含切片標(biāo)頭,因此將復(fù)制切片標(biāo)頭。切片頭包含指向支持?jǐn)?shù)組的指針,支持?jǐn)?shù)組不會(huì)被復(fù)制。

所以只有一個(gè)支持?jǐn)?shù)組來(lái)保存[5, 6, 7]元素。然后調(diào)用removeValueFromCell(),它會(huì)修改這個(gè)后備數(shù)組:

Before:
[5,?6,?7]
After:
[5,?7,?7]

因?yàn)樵撛?code>6已被刪除,所以切片的其余部分(元素[7])被復(fù)制以代替被刪除的元素。

然后您將這個(gè)新的切片標(biāo)頭(正確地只包含 2 個(gè)元素)分配給area1.Cells[1].

但是 slice 值area2.Cells[1]指向同一個(gè)后備數(shù)組,并且由于您沒有觸及這個(gè) slice 值,它的長(zhǎng)度仍然是3,所以它會(huì)看到所有后備數(shù)組都更改了元素:[5, 7, 7]。

另請(qǐng)注意,您的 實(shí)現(xiàn)removeValueFromCell()是錯(cuò)誤的,因?yàn)槿绻梢苿?dòng)元素在切片中多次列出,它的行為將不正確。這樣做的原因是因?yàn)楫?dāng)您刪除一個(gè)元素時(shí),后續(xù)元素的索引會(huì)移動(dòng)(減少 1),但您的循環(huán)變量不會(huì)考慮到這一點(diǎn)。最容易處理的是使用向下循環(huán)。


查看完整回答
反對(duì) 回復(fù) 2023-03-29
  • 1 回答
  • 0 關(guān)注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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