我如何在Swift中find一个项目的索引?

有没有一种叫做indexof或类似的方法?

var array = ["Jason", "Charles", "David"] indexOf(array, "Jason") // Should return 0 

编辑:作为斯威夫特3.0,您应该使用.index(where:)方法,并按照下面的Swift 2.0编辑中的更改。

编辑:作为斯威夫特2.0,您应该使用indexOf方法。 它也返回nil或它的论点的第一个索引。

 if let i = array.indexOf("Jason") { print("Jason is at index \(i)") } else { print("Jason isn't in the array") } 

使用findfunction。 它返回nil (如果没有find该值)或数组中第一个索引值。

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

在Swift 2.0(Xcode 7.1b)中,你可以使用

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

find(array, "Jason")已经被弃用了。

我做了如上所述的这个函数,但它返回索引数组

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

也许这对你有用

数组可以桥接到一个NSArray,所以你可以使用:

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

Array的扩展可以在这里创造奇迹。 下面是在这个StackOverflow答案共享的实现:

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

您可以添加一个数组扩展,它完全按照您的要求进行,即:

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

现在可以在所有Swift数组上使用.indexOf() ,例如:

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

虽然Max的响应非常好,但它不会让您find多个对象的多个索引,即。 数组子集的索引。 如果你需要这个function,扩展是一如既往,你最好的朋友

 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 } 

注意*:在Swift 1.2上工作,如果你想兼容1.1,则replace为! – > as