array1 = array1.filter{ $0.arrayInsideOfArray1.contains(array2[0]) }
上面的代码有效,但我试图检查$ 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]) }
我想要的是petArr中列出任何宠物的任何用户!
答案 0 :(得分:32)
一种方法是更新过滤器以查看宠物中的任何值是否在petArr
数组中:
users = users.filter { $0.pets.contains(where: { petArr.contains($0) }) }
第一个$0
来自filter
,它代表每个User
。
第二个$0
来自第一个contains
,它代表当前pets
的{{1}}数组中的每个宠物。
答案 1 :(得分:2)
如果内部数组中的元素是A B C 4 5 6 7 8
,你可以写:
Equatable
如果不是,您可以通过采用
array1 = array1.filter{ $0.arrayInsideOfArray1 == array2 }
协议并实施来制作它们
Equatable