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

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

生成二進制序列時切片附加無法按預期工作

生成二進制序列時切片附加無法按預期工作

Go
交互式愛情 2023-08-07 15:04:24
我有這段代碼可以生成長度為 n 的所有二進制序列。所以:allBitsSeqs(2) gives a 1-by-n int slice  [[1 1][0 0] [1 0] [0 1]]這是代碼:func allBitSeqs(n int) [][]int {          seq := [][]int{{1}, {0}}    for floor := 1; floor < n; floor++ {        remember := [][]int{}        for i := 0; i < len(seq); i++ {            one := append(seq[i], 1)            remember = append(remember, one)            zero := append(seq[i], 0)            remember = append(remember, zero)        }        seq = remember    }    return seq}游樂場鏈接:https://play.golang.org/p/s40RS7qEKfL問題是,當 n = 4 或更多時,我得到:[[1 1 1 0] [1 1 1 0] [1 1 0 0] [1 1 0 0] [1 0 1 0] [1 0 1 0] [1 0 0 0] [1 0 0 0] [0 1 1 0] [0 1 1 0] [0 1 0 0] [0 1 0 0] [0 0 1 0] [0 0 1 0] [0 0 0 0] [0 0 0 0]]注意它們是如何成對重復的。我嘗試過一些調(diào)試,我認為這與 Go 在需要分配更多空間時如何復制其切片有關。
查看完整描述

1 回答

?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

切片是底層數(shù)組的視圖。如果您有多個切片使用同一個底層數(shù)組,并且您不知道切片如何工作,則可能會得到意外的結果。

one := append(seq[i], 1)

比如說,one是一個指向數(shù)組的切片,該數(shù)組有能力保存添加的元素。像下面這樣:

[ 1 1 . . .  ]

數(shù)組容量為 5,前兩個元素設置為 1(切片長度=2)。再加上1,就變成:

[ 1 1 1 . .]

然后您執(zhí)行以下操作:

remember = append(remember, one)

這樣,您添加了一個指向上面數(shù)組的切片,其中 len=3 且容量=5。

然后:

zero := append(seq[i], 0)

請記住 seq[i] 仍然指向同一個數(shù)組。另外,seq[i]的len=2。所以數(shù)組就變成了:

[ 1 1 0 . . ]

那是你的zero。但是,當您添加 0 時,您也更改了 slice one。你最終會得到 和zeroone指向[1 1 0 . .]。

長話短說:當您將切片分配給變量時,您將視圖分配給數(shù)組。如果修改底層數(shù)組的內(nèi)容,視圖的內(nèi)容也會更改。

修復方法:創(chuàng)建一個新切片、復制數(shù)據(jù)并存儲該副本。


查看完整回答
反對 回復 2023-08-07
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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