有沒有一種叫做indexof或類似的方法?如何找到Swift中某個項目的索引?
var array = ["Jason", "Charles", "David"]
indexOf(array, "Jason") // Should return 0
有沒有一種叫做indexof或類似的方法?如何找到Swift中某個項目的索引?
var array = ["Jason", "Charles", "David"]
indexOf(array, "Jason") // Should return 0
編輯:由於雨燕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")
}
列的延伸可以在這裏創造奇蹟。這裏有一個實施this StackOverflow answer共享:
extension Array {
func find (includedElement: T -> Bool) -> Int? {
for (idx, element) in enumerate(self) {
if includedElement(element) {
return idx
}
}
return nil
}
}
Swift 2.0 has array.indexOf(...)所以這不再需要 – n13
您可以添加你想要做的是什麼的陣列擴展,即:
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
我製成像上述這樣的功能,但它返回索引的陣列
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
}
}
也許你
雖然從最大的反應是巨大的,它不會讓你找到多個對象的多個指標,也就是說,它是有用的。數組子集的索引。如果你需要的功能,擴展是一如既往,你最好的朋友
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的兼容性,更換爲! - >如
在夫特2.0(Xcode中7.1b),則可以使用
if let result = array.indexOf("Jason")
而find(array, "Jason")
已棄用。
注意:查找與任何類型的對象相同類型的對象數組中的任何類型... – BananaAcid
'find'不再適用於Swift 2.0中的數組 – kakubei
@kakubei謝謝,更新 – nathan