亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

通過附加到 golang 中的現有切片來創建新切片

通過附加到 golang 中的現有切片來創建新切片

Go
拉莫斯之舞 2022-06-27 10:10:09
我正在編寫一個程序來生成一片獨特元素的所有可能排列。相同的代碼可以在這里找到有一次,我需要從原始數字切片創建一個新切片。這個新切片比原始切片少一個元素。我嘗試了兩種不同的變體appendnums是原始切片,remaining也是我要創建的新切片。 i是一個int范圍從0到len(nums)-1。變體 1:remaining := make([]int, 0)remaining = append(remaining, nums[:i]...)remaining = append(remaining, nums[i+1:]...)變體 2:remaining := append(nums[:i], nums[i+1:]...)雖然該程序適用于 Variant 1 ,但它與 Variant 2 的行為不正確。我想了解這兩個 Variant 的確切區別是什么?
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

這里 slicenums[:i]是通過對更大的數組進行切片來創建的nums。這導致它有足夠的容量來擴展到位。因此,類似的操作 append(nums[:i], nums[i+1:]...)會導致元素nums被來自的元素覆蓋nums[i+1:]。這會改變原始數組,從而改變行為。

正如@icza 所建議的,該概念已被捕獲here。

要修復 Variant 2,我們可以使用這樣的完整切片表達式

remaining := append(nums[0:i:i], nums[i+1:len(nums):len(nums)]...)


查看完整回答
反對 回復 2022-06-27
  • 1 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號