2016-10-25 2 views
1

Ich verwende Swift 3.0 und diesen Code haben für als Erweiterung der String-Typ ein Element in einem Array suchen:Erhalten Sie eine kürzere Version der for-Schleife?

extension String { 
    func equal(compareToArray : [String]) -> Bool { 
     for s in compareToArray { 
      if self == s { 
       return true 
      } 
     } 
     return false 
    } 
} 

Es fein läuft, aber meine Frage ist, kann ich es besser machen (kürzer/einfacher oder schneller)?

Okay, eine andere ähnliche Probe:

func contains(compareToArray : [String]) -> Bool { 
    for s in compareToArray { 
     if self.contains(s) { 
      return true 
     } 
    } 
    return false 
} 

Antwort

6

Shorter, einfacher, schneller

let compareToArray = ["foo", "bar", "baz"] 
compareToArray.contains("bar") 

Edit:

Nach Ihrem zweiten Beispiel

compareToArray!. Filter {$ 0 Ins ("oo")} .isEmpty

compareToArray.index(where: {$0.contains("oo")}) != nil 
+0

:-) Ja, du hast Recht. Ich fügte ein weiteres Beispiel hinzu, das nicht umgedreht werden sollte. :-) – Peter71

+0

Ok, dieser Filter nimmt alle Array-Mitglieder, auch wenn das Ergebnis bereits wahr ist. Es ist kürzer, aber langsamer. Ich kann mich nicht entscheiden, welches besser ist. :-) Vielen Dank. – Peter71

+0

Wie ist Ihr erstes Beispiel schneller als das OP? Schneller zu tippen, sicher, aber "contains" macht genau dasselbe unter der Haube. Auch Ihr zweites Beispiel durchläuft unnötigerweise die Gesamtheit von 'compareToArray', selbst wenn $ 0.contains (" oo ")' wahr zurückgibt. '' CompareToArray.contains {...} '' wäre besser :) – Hamish

0

Wenn Sie, ob ein Element in ein Array gehören überprüfen möchten, in Swift 3.0 dies ein besserer Weg ist:

Verwendung:

array.index (von: element) -> Int?

Ex:

let myArray = ["a", "b", "c"] 
let needle = "b" 

if let pos = myArray.index(of: needle') { 
    print("\(needle) is in array at position : \(pos)" 
} else { 
    print("It's not in array") 
} 
+0

Ich suche nach einer allgemeinen Optimierung einer For-Schleife mit internen Funktionen wie Filter, Map, ... – Peter71

Verwandte Themen