首页 > 解决方案 > 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
}

有没有一种简洁的方法可以将数组中每个对象的一个​​属性与数组中另一个每个对象的一个​​属性进行比较?

标签: arraysswiftfilter

解决方案


让我们分解一下:您需要所有与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”)]


推荐阅读