Быстрый объектный массив фильтров с другим массивом объектов - PullRequest
0 голосов
/ 26 сентября 2019

Я борюсь с тем, что у меня было несколько дней, чтобы сделать условный фильтр массива объектов с другим массивом объектов.

не хватает возможностей для правильного абстрагирования здесь ... может быть, у вас есть некоторые идеи.

У меня есть заданный массив объектов A, но более сложный

var ArrA = [{
 number: 1,
 name: "A"
}, {
 number: 2,
 name: "C"
}]

И я хочу подать для всех результатов сопоставления идентификатора объекта массива объектов B

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
}

Есть ли простой способ сравнить один атрибут каждого объекта в массиве с одним атрибутом другого каждого объекта в массиве?

1 Ответ

1 голос
/ 26 сентября 2019

Давайте разберемся с этим: вам нужны все arrA объекты, которые соответствуют arrB идентификаторам, поэтому прежде всего вам нужно map ваш arrB досписок идентификаторов (потому что вам не нужна другая информация)

let arrBid = Set(arrB.map({ $0.id })) // [1, 3, 10]

Как указано ниже, приведение к Set даст вам лучшие результаты для огромных массивов, но этоне обязательно, хотя

Тогда вам просто нужно отфильтровать ваш первый arrA , сохранив только объект, идентификатор которого содержится в arrBid :

let arrAFilter = arrA.filter({ arrBid.contains($0.number) })

[(число: 1, имя: "A")]

и вуаля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...