ios - 如何根据另一个数组元素更新数组的所有对象

标签 ios arrays swift

假设我有两个对象类型相同的数组,现在我想根据另一个数组的某个键更新第一个数组的所有元素。 如果 myArray id 与 testArray id 匹配,我想将 isSelected 更新为 true。 我可以使用 for 循环遍历 myArray 并检查在 testArray 中找到的每个 id,并且可以更新基于该索引的 isSelected 值。但我想知道我是否可以为这个用例使用像 containsfilter 这样的高阶函数。

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  }

关于ios - 如何根据另一个数组元素更新数组的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564856/

相关文章:

ios - 当用户的手指不再位于启动 panGesture 的 View 中时,如何结束 UIPanGesture?

javascript - 在字符串中添加数字

swift - 另一个 View /按钮 swift 3 顶部的手势识别器

ios - swift iOS : custom keyboard only slightly different from default keyboard

ios - 重新加载 FSCalendar View

ios - 如何在应用程序未运行(终止/终止)时保持 Core Location 和 Core Bluetooth 运行?

c - 多维数组的冒泡排序

python - 二维数组第 0 个位置的所有元素 - Python

ios - SwiftUI - 在某些情况下隐藏导航栏

ios - UIRefreshControl 加载图标仍在加载