是否有一种名为indexof或类似的方法?
var array = ["Jason", "Charles", "David"]
indexOf(array, "Jason") // Should return 0
答案 0 :(得分:58)
编辑:从Swift 3.0开始,您应该使用.index(where:)
方法,并按照下面的Swift 2.0编辑中的更改进行操作。
编辑:从Swift 2.0开始,您应该使用indexOf
方法。它也会返回nil
或其参数的第一个索引。
if let i = array.indexOf("Jason") {
print("Jason is at index \(i)")
} else {
print("Jason isn't in the array")
}
使用find
功能。它返回nil
(如果找不到值)或数组中值的第一个索引。
if let i = find(array, "Jason") {
println("Jason is at index \(i)")
} else {
println("Jason isn't in the array")
}
答案 1 :(得分:14)
在Swift 2.0(Xcode 7.1b)中,您可以使用
if let result = array.indexOf("Jason")
而find(array, "Jason")
已被弃用。
答案 2 :(得分: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
}
}
也许它会对你有用
答案 3 :(得分:1)
数组可以桥接到NSArray,因此您可以使用:
array.bridgeToObjectiveC().indexOfObject("Jason")
答案 4 :(得分:1)
Array的扩展可以在这里创造奇迹。以下是this StackOverflow answer中共享的实现:
extension Array {
func find (includedElement: T -> Bool) -> Int? {
for (idx, element) in enumerate(self) {
if includedElement(element) {
return idx
}
}
return nil
}
}
答案 5 :(得分: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
}
}
现在允许您在所有Swift数组上使用.indexOf()
,例如:
["Jason", "Charles", "David"].indexOf("Jason") //0
答案 6 :(得分:0)
虽然Max的响应非常好,但它不允许您找到多个对象的多个索引,即。数组子集的索引。如果您需要该功能,扩展程序将一如既往地成为您最好的朋友
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兼容,请替换为! - &GT;如