arrays - Swift 5:如何更新数组数组中的值?
问题描述
我正在尝试更新数组数组中的值,但我想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")})
解决方案
一个解决方案是enumerate
数组也有索引
for (index, item) in buffer.enumerated() {
if moved.contains(where: {$0[2] == item[2]}) {
switch item[3] {
case "Removal":
buffer[index][3] = "Moved(out)"
case "Addition":
buffer[index][3] = "Moved(in)"
default:
break
}
}
}
推荐阅读
- google-chrome-extension - chrome扩展没有错误,仍然无法填写表格
- reactjs - 使用react-redux循环调用图形组件时如何处理图形数据
- spring - 当存在上下文路径时,Spring Boot Admin Client 仅显示详细信息
- java - 如何在java中将String Json转换为Json
- bash - 如何在bash脚本中递归地选择给定目录中的所有文件
- ios - 我可以将返回的 CLLocationDistance 添加到 NSMutableArray 中吗?
- google-api - 是否可以通过 API 以编程方式管理 Google Play 控制台电子邮件列表?
- javascript - 如何将字符串转换为对象
- c++ - XSDK:链接器错误:dhcp_fine_tmr() & dhcp_coarse_tmr() 未定义
- java - findViewById() 之后我的自定义 SurfaceView 为空