【发布时间】:2020-12-09 12:46:18
【问题描述】:
我正在编写一个程序来生成一片独特元素的所有可能排列。 可以找到相同的代码here
在某一时刻,我需要从原始数字切片创建一个新切片。这个新切片比原始切片少一个元素。我用append尝试了两种不同的变体
nums 是原始切片,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 上运行不正常。 我想了解这两个变体的确切区别是什么?
【问题讨论】:
-
您正在使用具有相同数组支持的切片,意味着
nums也已修改,请参阅here -
我推荐你探索slices-intro
-
看到这个答案:Concatenate two slices in Go.
-
你在 nums 中追加,所以“1 2 3”变成了“2 3 3”
-
不要使用
append来创建一个新的切片,用它来附加到一个切片上。要创建新切片,请使用切片文字或make()。要将数据从现有切片复制到新切片,请使用copy()。
标签: go slice permutation