array1 = array1.filter{ $0.arrayInsideOfArray1.contains(array2[0]) }
Le code ci-dessus fonctionne, mais j'essaie de vérifier si tous les éléments de $ 0.arrayInsideOfArray1 correspondent à tous les éléments de array2 et pas seulement [0]
Exemple:
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]) }
Ce que je veux, c'est tout utilisateur qui a un animal de compagnie répertorié dans le fichier petArr!
Une approche consiste à mettre à jour votre filtre pour voir si une valeur dans pets est dans le tableau petArr
:
users = users.filter { $0.pets.contains(where: { petArr.contains($0) }) }
La première $0
provient du filter
et il représente chaque User
.
La deuxième $0
est du premier contains
et représente chaque animal de compagnie dans le tableau pets
du User
actuel.
Si les éléments à l'intérieur du tableau interne sont Equatable
, vous pouvez simplement écrire: array1 = array1.filter{ $0.arrayInsideOfArray1 == array2 }
Si ce n'est pas le cas, vous pouvez les créer en adoptant le protocole Equatable
et en implémentant func ==(lhs: YourType, rhs: YourType) -> Bool