2014-06-08 36 views

回答

58

編輯:由於雨燕3.0的,你應該使用.index(where:)方法來代替,然後按照下面的雨燕2.0編輯的變化。

編輯:從Swift 2.0開始,您應該使用indexOf方法。它也返回nil或其參數的第一個索引。使用find函數。它返回nil(如果找不到值)或數組中第一個索引值。

if let i = find(array, "Jason") { 
    println("Jason is at index \(i)") 
} else { 
    println("Jason isn't in the array") 
} 
+0

注意:查找與任何類型的對象相同類型的對象數組中的任何類型... – BananaAcid

+0

'find'不再適用於Swift 2.0中的數組 – kakubei

+0

@kakubei謝謝,更新 – nathan

1

陣列可橋接至一個NSArray,所以你可以使用:

array.bridgeToObjectiveC().indexOfObject("Jason") 
+6

'bridgeToObjectiveC()'是一種私有方法。使用'as'運算符代替。 – raheel

+1

即(數組爲NSArray).indexOfObject(「Jason」) – josef

1

列的延伸可以在這裏創造奇蹟。這裏有一個實施this StackOverflow answer共享:

extension Array { 
    func find (includedElement: T -> Bool) -> Int? { 
    for (idx, element) in enumerate(self) { 
     if includedElement(element) { 
     return idx 
     } 
    } 
    return nil 
    } 
} 
+0

Swift 2.0 has array.indexOf(...)所以這不再需要 – n13

0

您可以添加你想要做的是什麼的陣列擴展,即:

extension Array { 
    func indexOf<T : Equatable>(x:T) -> Int? { 
     for i in 0..self.count { 
      if self[i] as T == x { 
       return i 
      } 
     } 
     return nil 
    } 
} 

現在讓你對所有斯威夫特陣列使用.indexOf(),如:

["Jason", "Charles", "David"].indexOf("Jason") //0 
8

我製成像上述這樣的功能,但它返回索引的陣列

extension Array { 
    func indexesOf<T : Equatable>(object:T) -> [Int] { 
     var result: [Int] = [] 
     for (index,obj) in enumerate(self) { 
      if obj as T == object { 
       result.append(index) 
      } 
     } 
     return result 
    } 
} 

也許你

0

雖然從最大的反應是巨大的,它不會讓你找到多個對象的多個指標,也就是說,它是有用的。數組子集的索引。如果你需要的功能,擴展是一如既往,你最好的朋友

func indexesOfSubset<T : Equatable>(objects : [T]) -> [Int] { 

    // Create storage for filtered objectsand results 
    var unusedObjects = objects 
    var result : [Int] = [] 

    // Enumerate through all objects in array 
    for (index, obj) in enumerate(self) { 

     // Enumerate again through all objects that has not been found 
     for x in unusedObjects { 

      // If we hit match, append result, remove it from usused objects 
      if obj as! T == x { 
       result.append(index) 
       unusedObjects = unusedObjects.filter({ $0 != x }) 
       break 
      } 
     } 
    } 

    // Get results 
    return result 
} 

注*:工程於雨燕1.2,如果你想與1.1的兼容性,更換爲! - >如

14

在夫特2.0(Xcode中7.1b),則可以使用

if let result = array.indexOf("Jason") 

find(array, "Jason")已棄用。

相關問題