arrays - Swift过滤器对象数组和另一个对象数组
问题描述
我挣扎了好几天,想办法用另一个对象数组对一个对象数组进行条件过滤。
缺乏在这里正确抽象的能力......也许你有一些想法。
我有一个给定的对象数组 A 但更复杂
var ArrA = [{
number: 1,
name: "A"
}, {
number: 2,
name: "C"
}]
我想对对象数组 B 的所有结果匹配 id 进行归档
var ArrB = [{
id: 1,
categorie: "wine"
}, {
id: 3,
categorie: "beer"
}, {
id: 10,
categorie: "juice"
}]
在最好的情况下,直接将它与 if 条件一起移动......但我无法处理它......这就是我现在所在的地方......这不起作用......
let newArray = ArrA.filter{$0.number == ArrB.... }.
if (newArray.count != 0){
// Do something
}
有没有一种简洁的方法可以将数组中每个对象的一个属性与数组中另一个每个对象的一个属性进行比较?
解决方案
让我们分解一下:您需要所有与arrB id 匹配的arrA对象,所以首先您需要将arrB放入id 列表(因为您不需要其他信息)map
let arrBid = Set(arrB.map({ $0.id })) // [1, 3, 10]
如下所述,将其转换Set
为大型数组将为您提供更好的结果,但不是强制性的
然后你只需要通过只保留 id 包含在 arrBid 中的对象来过滤你的第一个arrA:
let arrAFilter = arrA.filter({ arrBid.contains($0.number) })
[(编号:1,名称:“A”)]
瞧
推荐阅读
- ms-access - MS Access 查找并更新另一个字段
- javascript - 根据下拉列表自动选择两个选项
- php - 在替换 SQL 中包含帖子标题 wordpress
- c# - 如何设置/获取 UInt64 的位?
- javascript - Javascript - 如何等待结果
- r - 如何从文本中提取日期
- javascript - Javascript 将 M3U 播放列表显示为文本
- php - 在没有apache的nginx上安装php7.2-xml
- javascript - AngularJS errors.angularjs.org - 错误文档链接得到 404 错误
- android - LinearLayout 内的 FAB 位于 Fragments 之上