【发布时间】:2019-11-25 18:58:11
【问题描述】:
我正在尝试更新数组数组中的值,但我猜for item in buffer 必须在缓冲区中制作项目的副本,而不是提供对原始项目的引用。除了某种for i=...{buffer[i][3]='Moved'} 之外,还有什么方法可以做到这一点。
var buffer = [[String]]()
let bufRemoved = buffer.filter({$0[3] == "Removal"})
let bufAdded = buffer.filter({$0[3] == "Addition"})
let moved = bufRemoved.filter({item in bufAdded.contains(where: {$0[2] == item[2]})})
for var item in buffer {
if moved.contains(where: {$0[2] == item[2]}) {
switch item[3] {
case "Removal":
item[3] = "Moved(out)"
case "Addition":
item[3] = "Moved(in)"
default:
break
}
}
}
let bufMoved = buffer.filter({$0[3].contains("Move")})
【问题讨论】:
-
for i in buffer.indices是要走的路。 -
没有。这就是 Swift 中的情况。但是你可以组成一个不同的
updatedBuffer数组,在 for 循环中添加每个项目,可以继续使用。