Swift 3 memfilter larik objek dengan elemen-elemen larik

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!

Larutan

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.

Komentar (0)

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
Komentar (0)