修改 Swift 中的数组项
Modifying array items in Swift
我在 Swift 中发现了一些非常奇怪的行为。这是代码:
var array2d: [[Int]] = [[1]]
print(array2d) // prints [[1]]
var first = array2d[0]
first.append(2)
print(array2d) // still prints [[1]]!!!
我完全希望最后一行打印 [[1, 2]]
。我无法解释当前的行为。我期望 array2d[0]
到 return 对第一项的引用,或者可能是该引用的副本。在任何一种情况下,修改该对象都应该修改 array2d
。但事实并非如此。
但是,如果我像这样更新数组:
array2d[0].append(2)
然后它按预期打印 [[1, 2]]
。
有人可以为我解释一下吗?
referenced/passed around/copied 在 swift 中的数组是如何争论的,看看 this link.
本质上发生的事情是 var first = array2d[0]
正在获取该索引处的数组副本,而不是像您期望的那样创建引用。因此,使用下标表示法访问数组可以让您正确地更改数组,但不能创建新变量。
我在 Swift 中发现了一些非常奇怪的行为。这是代码:
var array2d: [[Int]] = [[1]]
print(array2d) // prints [[1]]
var first = array2d[0]
first.append(2)
print(array2d) // still prints [[1]]!!!
我完全希望最后一行打印 [[1, 2]]
。我无法解释当前的行为。我期望 array2d[0]
到 return 对第一项的引用,或者可能是该引用的副本。在任何一种情况下,修改该对象都应该修改 array2d
。但事实并非如此。
但是,如果我像这样更新数组:
array2d[0].append(2)
然后它按预期打印 [[1, 2]]
。
有人可以为我解释一下吗?
referenced/passed around/copied 在 swift 中的数组是如何争论的,看看 this link.
本质上发生的事情是 var first = array2d[0]
正在获取该索引处的数组副本,而不是像您期望的那样创建引用。因此,使用下标表示法访问数组可以让您正确地更改数组,但不能创建新变量。