二维切片的元素删除

二维切片的删除:现在需要删除每个内层一维数组的最后一个元素,下面的写法是否可行呢?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func main() {
    arr := [][]int{
       {1, 2, 3},
       {4, 5, 6},
       {7, 8, 9},
    }
    for _, item := range arr {
       item = item[:len(item)-1]
       fmt.Println(item) // 输出结果是什么?
    }
    fmt.Println(arr) // 输出结果是什么?
}

这里的 item 只是 arr 数组中一维数组的副本(底层指向的是同一个数组),对其进行切片只是缩短了 item 的索引范围,对 arr 数组并没有任何的影响。

所以输出结果是:

1
2
3
4
[1 2]
[4 5]
[7 8]                    
[[1 2 3] [4 5 6] [7 8 9]]

正确的做法是:直接修改 arr 数组。

1
2
3
4
for i, item := range arr {
   arr[i] = item[:len(item)-1] // 直接修改arr[i]的值
}
fmt.Println(arr) // [[1 2] [4 5] [7 8]]
0%