【发布时间】:2016-05-06 22:01:09
【问题描述】:
已经针对其他几种编码语言提出并回答了这个问题,但我认为我可能有一个独特的问题。所以,我想复制一个三维数组(填充任意对象)。我相信我发现了这一点:
var duplicateArray = originalArray
不起作用,因为无论出于何种原因,他们认为让它创建一个重复数组是一个很好的安全措施,但将指针作为子数组填充,而不是复制子数组。这似乎是一个奇怪的设计选择,因为如果 duplicateArray 和 originalArray 是一维的,这将按预期工作。无论如何,所以我尝试了这个(其中对象是一些任意对象):
var duplicateArray = [[[object]]]()
for x in 0..<originalArray.count {
var tempArrYZ = [[object]]()
for y in 0..<originalArray[x].count {
var tempArrZ = [object]()
for z in 0..<originalArray[x][y].count {
let copiedObj = originalArray[x][y][z]
tempArrZ.append(copiedObj)
}
tempArrYZ.append(tempArrZ)
}
duplicateArray.append(tempArrYZ)
}
这仍然不起作用; duplicateArray 中的所有值都将充当指向它们在 originalArray 中的值的指针。也许有人有一个简单的方法来深度复制多维数组,或者也许有人能找到我的错误?
编辑:这与其他问题有何重复?我在问具体如何“深度”复制。关于复制数组的问题模糊不清。
【问题讨论】:
-
请注意,初始化和附加到数组的成本很高,因为它可能涉及多次调整大小操作(这些操作本身需要对数组进行完整复制)。当你知道时,用你需要的大小初始化数组。
-
是的,正如所指出的,如果值是值类型,它们会被复制到带有
var duplicateArray = originalArray的新数组中,如果有对象,它们的引用会被复制。不确定那些不明白这一点的人是否会要求对 swift 进行批评......
标签: swift multidimensional-array duplicates