ios - 如何根据另一个数组元素更新数组的所有对象
问题描述
假设我有两个相同对象类型的数组,现在我想根据另一个数组的某个键更新第一个数组的所有元素。I want to update isSelected to true if myArray id ,matches with testArray id
. 我可以使用 for 循环遍历 myArray 并检查在 testArray 中找到的每个 id,并根据该索引更新 isSelected 值。但我想知道我是否可以使用更高阶的函数,比如contains
这个filter
用例。
class MyObject
{
var id: Int
var isSelected:Bool?
var value: String
}
var myArray = [{id: 1, isSelected: nil, value: abcd}, {id: 2,
isSelected: nil, value: xyz}, {id: 3, isSelected: nil, value: hghghg} ]
var testArray = [{id: 1, isSelected: nil, value: abcd}, {id: 2,
isSelected: nil, value: xyz}]
let resultArray = [{id: 1, isSelected: true, value: abcd}, {id: 2,
isSelected: true, value: xyz}, {id: 3, isSelected: nil, value: hghghg}]
解决方案
你可以试试
let testArrIds = testArray.map { $0.id }
myArray.forEach { $0.isSelected = testArrIds.contains($0.id) ? true : $0.isSelected }
它可以是 1 行,但我不想在 forEach 的每个循环中都映射 ID,因为它会很昂贵
myArray.forEach { $0.isSelected = testArray.map { $0.id }.contains($0.id) ? true : $0.isSelected }
推荐阅读
- react-admin - 我没有将我的后端 api 与 react-admin 连接起来。发生的错误:
- javascript - 停止模态窗口滚动后面的内容
- java - 我想将此代码转换为声音(尝试共享音频文件)
- c# - 数组索引超出范围,在其他帖子中找不到答案
- eclipse - 如何设置 JPA 控制台或类似的东西来执行 JPQL 查询?
- git - 如果没有人共享分支,Git Rebase
- javascript - Tensorflow.js 预测的上限好像是1?
- javascript - 如何在每次调用时为 setInterval 生成新的延迟?
- python - tensorflow profiler 形状不兼容警告
- amazon-web-services - 如何处理 EC2 用户数据