2015-01-29 8 views
18

Próbuję sprawdzić, czy konkretny element (wartość właściwości) istnieje w tablicy obiektów, ale nie można znaleźć żadnego rozwiązania. Daj mi znać, czego tu brakuje.Jak sprawdzić, czy wartość właściwości istnieje w tablicy obiektów w szybkim

 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") 
     } 

Odpowiedz

31

można filtrować tablicę jak poniżej:

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

który powróci szereg elementów pasujących warunek podany w zamknięciu - w powyższym przypadku, zwróci tablicę zawierającą wszystkie elementy mający właściwość id równa 1.

ponieważ trzeba logiczną wynik, po prostu zrobić sprawdzenie jak:

let exists = results.isEmpty == false 

exists będzie prawdziwa, jeśli filtrowana tablica ma co najmniej jeden element

1

Działa to dobrze ze mną:

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

W 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") 
} 
6

W Swift 3:

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

Jak zwrócić obiekt po udanym porównaniu? – Hemang

+0

@Hemang używaj "filtru" zamiast "zawiera", jeśli potrzebujesz czegoś więcej niż samego warunku testowania. –

0

Mała iteracja na @ rozwiązania Antonio używając , (where) notację:

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") 
} 
0

poszedłem z tego rozwiązania podobnego problemu. Using contains zwraca wartość typu Boolean.

var myVar = "James" 

if myArray.contains(myVar) { 
      print("present") 
     } 
     else { 
      print("no present") 
     } 
Powiązane problemy