Data structures 在Swift中过滤多个值

Data structures 在Swift中过滤多个值,data-structures,filter,contains,swift5,higher-order-functions,Data Structures,Filter,Contains,Swift5,Higher Order Functions,我知道Swift中的过滤器和包含功能非常强大,它使我的许多作品变得简单。然而,我陷入了这样一种境地:我必须从模型数组中过滤/验证一组不同的值 让我们假设我有一个如下的模型 struct Person { var name: String var ID: String } 我有一系列的模型,如下所示: [ { sku = "123" attribute

我知道Swift中的过滤器包含功能非常强大,它使我的许多作品变得简单。然而,我陷入了这样一种境地:我必须从模型数组中过滤/验证一组不同的值

让我们假设我有一个如下的模型

 struct Person {
       var name: String
       var ID: String
    }
我有一系列的模型,如下所示:

[
            {
                sku = "123"
                attributes =      [
                    {
                        name:"Victor"
                        ID:"250"
                    },
                    {
                        name:"Shaw"
                        ID:"252"
                    }
                ]
            },
            {
                sku = "123"
                attributes = [
                    {
                        name:"John"
                        ID:"222"
                    },
                    {
                        name:"Nixon"
                        ID:"333"
                    }
                ]
            }
        ]
现在我想通过属性中的多个ID来过滤sku。例如,如果我需要过滤ID为250和252的SKU,我需要这样的东西来实现它

     personModelArray.forEach { person in
        person.attributes.contains(where: { $0.ID == 250 && $0.ID == 252  })
    }

OR

   personModelArray.forEach { person in
        person.attributes.filter { $0.ID == 250 && $0.ID == 252  }
    }

我想要的是一个条件,比如验证属性数组是否同时具有这两个值。

条件
$0.ID==250&&$0.ID==252
始终为false!一个存储器如何在同一时刻具有两个不同的值

看看这个简单的例子

struct Item {
    let a: Int
    let b: String
}

let arr = [Item(a: 0, b: "zero"),
           Item(a: 1, b: "one"),
           Item(a: 2, b: "two"),
           Item(a: 4, b: "four")]
筛选所有项目,其中a==1或a==4

let arr0 = arr.filter { item in
    item.a == 1 ||
    item.a == 4
}
或者,如果您喜欢$parameter表示法

let arr1 = arr.filter { $0.a == 1 || $0.a == 4 }
最后,

let arr2 = arr.filter { item in
    [1, 4].contains(item.a)
}
let arr3 = arr.filter { [1, 4].contains($0.a) }