Swift 3过滤具有数组元素的对象数组

Nik*_*kaE 16 arrays swift

array1 = array1.filter{ $0.arrayInsideOfArray1.contains(array2[0]) }
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我试图检查$ 0.arrayInsideOfArray1的所有元素是否与array2的所有元素匹配,而不仅仅是[0]

例:

struct User {
    var name: String!
    var age: Int!
    var hasPet: Bool!
    var pets: [String]!
}

var users: [User] = []

users.append(User(name: "testUset", age: 43, hasPet: true, pets: ["cat", "dog", "rabbit"]))
users.append(User(name: "testUset1", age: 36, hasPet: true, pets:["rabbit"]))
users.append(User(name: "testUset2", age: 65, hasPet: true, pets:["Guinea pigs", "Rats"]))

let petArr = ["cat", "dog", "rabbit"]

users = users.filter { $0.pets.contains(petArr[0]) }
Run Code Online (Sandbox Code Playgroud)

我想要的是petArr中列出任何宠物的任何用户!

rma*_*ddy 38

一种方法是更新过滤器以查看宠物中的任何值是否在petArr数组中:

users = users.filter { $0.pets.contains(where: { petArr.contains($0) }) }
Run Code Online (Sandbox Code Playgroud)

第一个$0来自filter和它代表每个User.

第二个$0是从第一个开始contains,它代表pets当前数组中的每个宠物User.