首页 > 解决方案 > 如何根据另一个数组元素更新数组的所有对象

问题描述

假设我有两个相同对象类型的数组,现在我想根据另一个数组的某个键更新第一个数组的所有元素。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}] 

标签: iosarraysswift

解决方案


你可以试试

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  }

推荐阅读