2016-10-25 6 views
1
私はスウィフト3.0を使用して文字列型の延長として配列内のアイテムを検索するため、このコードを持ってい

forループの短いバージョンを取得しますか?

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

それは細かい動作しますが、私の質問があり、私は/それが良い(短い行うことができますよりシンプルか速いか)?オーケー

、他の同様のサンプル:

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

答えて

6

短く、シンプルな、

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

編集速い!あなたの第二の例

compareToArrayによると

。フィルタ{$ 0.contaイン( "OO")} .isEmpty

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

はい:-)、あなたは正しいです。もう一つの例を追加しました。 :-) – Peter71

+0

結果が既に真であっても、そのフィルターはすべての配列メンバーを取ります。それはより短いが、より遅い。私はどちらが良いかは決めることができません。 :-) ありがとうございました。 – Peter71

+0

あなたの最初の例は、OPよりも速いのですか?より速く入力するようにしますが、 'contains 'はフードの中で全く同じことを行います。また、2番目の例では、 '$ 0.contains(" oo ")'がtrueを返しても、compareToArray全体を不必要に反復します。 'compareToArray.contains {...} 'を使うとより良いでしょう:) – Hamish

0

あなたは要素が、これは良い方法であるスウィフト3.0で、アレイに属しているかどうかを確認したい場合:

使用:

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

例:

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

私はフィルタ、マップ、などの内部関数を使用してforループの一般的な最適化を探しています... – Peter71

関連する問題