我在 CodeWars 上解决简单的难题。以下代码有问题:
func FindOutlier(integers []int) int {
coping := integers //делаем копию массива
var DosZeroCount int = 0
var DosZeroNotCount int = 0
for index, _ := range coping {
coping[index] = coping[index] % 2
if coping[index] == 1 {
DosZeroNotCount++
} else {
DosZeroCount++
}
}//обнуляется integers без одного элемента
问题是应对是对原始数组的隐式引用。根据语言描述,这样的动作coping := integers应该完全复制数组,而不是创建指向它的链接。如何复制整个数组?我怀疑重点是整数是一个函数参数......
使用数组和映射是不同的,您需要了解一些规则。
coping := integers当您更改元素的状态但不希望它在地图或数组中更改时,可以在范围内工作。for i := range a并且for i, v := range &a永远不要创建副本a,但在这里它for i, v := range a会创建一个副本))您只需要记住。在这里自己看看播放链接
因此,制作数组副本的最简单方法是
现在谈谈切片(切片)
Golang 有切片的概念——它几乎就像一个数组,只是它的行为不像一个数组。例如下面的代码将复制
但是如果“复制”这样改变,那么原来的数组也会改变
这一切都是因为切片是指向数组的指针(更准确地说,新切片的每个元素都引用原始切片的一个元素)。
这里是源
总计,以免混淆