web-dev-qa-db-ja.com

swiftのオブジェクトの配列にプロパティ値が存在するかどうかを確認する方法

特定の項目(プロパティの値)がオブジェクトの配列に存在するかどうかを確認しようとしていますが、解決策を見つけることができませんでした。ここで何が欠けているのか教えてください。

        class Name {
            var id : Int
            var name : String
            init(id:Int, name:String){
                self.id = id
                self.name = name
            }
        }

        var objarray = [Name]()
        objarray.append(Name(id: 1, name: "Nuibb"))
        objarray.append(Name(id: 2, name: "Smith"))
        objarray.append(Name(id: 3, name: "Pollock"))
        objarray.append(Name(id: 4, name: "James"))
        objarray.append(Name(id: 5, name: "Farni"))
        objarray.append(Name(id: 6, name: "Kuni"))

        if contains(objarray["id"], 1) {
            println("1 exists in the array")
        }else{
            println("1 does not exists in the array")
        }
37
Nuibb

次のように配列をフィルタリングできます。

let results = objarray.filter { $0.id == 1 }

クロージャで指定された条件に一致する要素の配列を返します。上記の場合、idプロパティが1に等しいすべての要素を含む配列を返します。

ブール値の結果が必要なので、次のようなチェックを行ってください。

let exists = results.isEmpty == false

フィルターされた配列に少なくとも1つの要素がある場合、existsはtrueになります

57
Antonio

In Swift

if objarray.contains(where: { name in name.id == 1 }) {
    print("1 exists in the array")
} else {
    print("1 does not exists in the array")
}
13
TheEye

Swift 2.x

if objarray.contains({ name in name.id == 1 }) {
    print("1 exists in the array")
} else {
    print("1 does not exists in the array")
}
9
j_gonfer

,where)表記を使用した@Antonioのソリューションの小さな反復:

if let results = objarray.filter({ $0.id == 1 }), results.count > 0 {
   print("1 exists in the array")
} else {
   print("1 does not exists in the array")
}
3
Stoff81

// Swift 4.2

    if objarray.contains(where: { $0.id == 1 }) {
        // print("1 exists in the array")
    } else {
        // print("1 does not exists in the array")
    }
1
Danielvgftv

これは私と一緒にうまくいきます:

if(contains(objarray){ x in x.id == 1})
{
     println("1 exists in the array")
}
1
whitney13625

署名:

let booleanValue = 'propertie' in yourArray;

例:

let yourArray= ['1', '2', '3'];

let contains = '2' in yourArray; => true
let contains = '4' in yourArray; => false
0
ricardoaleixoo

私はこの解決策で同様の問題に取り組みました。 containsを使用すると、ブール値が返されます。

var myVar = "James"

if myArray.contains(myVar) {
            print("present")
        }
        else {
            print("no present")
        }
0
Dan Korkelia