array1 = array1.filter{ $0.arrayInsideOfArray1.contains(array2[0]) }
Kode di atas berfungsi tetapi saya mencoba memeriksa apakah semua elemen $0.arrayInsideOfArray1 cocok dengan semua elemen array2, bukan hanya [0].
Contoh:
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]) }
Apa yang saya inginkan adalah setiap pengguna yang memiliki hewan peliharaan yang terdaftar di petArr!
Salah satu pendekatannya adalah dengan memperbarui filter Anda untuk melihat apakah ada nilai dalam pets yang ada di dalam array petArr
:
users = users.filter { $0.pets.contains(where: { petArr.contains($0) }) }
$0
pertama adalah dari filter
dan itu mewakili setiap Pengguna
.
$0
kedua adalah dari contains
pertama dan mewakili setiap hewan peliharaan dalam larik pets
dari Pengguna
saat ini.
Jika elemen-elemen di dalam larik internal adalah Equatable
, Anda bisa menulisnya:
array1 = array1.filter{ $0.arrayInsideOfArray1 == array2 }
Jika tidak, Anda bisa membuatnya, dengan mengadopsi protokol Equatable
dan mengimplementasikan
func ==(lhs: YourType, rhs: YourType) -> Bool