我试图通过搜索列表找到一个项目索引。有人知道怎么做吗?

我看到有一张单子。StartIndex和list。EndIndex,但我想要类似python的list.index("text")。


当前回答

在Swift 4/5中,使用“firstIndex”查找索引。

let index = array.firstIndex{$0 == value}

其他回答

这些方法对我都适用

这是我对Swift 4的解决方案:

let monday = Day(name: "M")
let tuesday = Day(name: "T")
let friday = Day(name: "F")

let days = [monday, tuesday, friday]

let index = days.index(where: { 
            //important to test with === to be sure it's the same object reference
            $0 === tuesday
        })

在Swift 2 (Xcode 7)中,Array包含了一个由CollectionType协议提供的indexOf方法。(实际上,有两个indexOf方法——一个使用相等来匹配参数,另一个使用闭包。)

在Swift 2之前,泛型类型(如集合)无法为从它们派生的具体类型(如数组)提供方法。所以,在Swift 1中。X, index of是一个全局函数…它也被重新命名了,所以在Swift 1中。X,这个全局函数叫做find。

这也是可能的(但不是必要的)使用indexOfObject方法从NSArray…或者其他任何来自基金会的更复杂的搜索方法,这些方法在Swift标准库中没有等价物。只需导入Foundation(或另一个传递导入Foundation的模块),将数组转换为NSArray,就可以使用NSArray上的许多搜索方法。

斯威夫特4

假设你想从名为cardButtons的数组中存储一个数字到cardNumber中,你可以这样做:

let cardNumber = cardButtons.index(of: sender)

Sender是按钮的名称

以防有人遇到这种问题

Cannot invoke initializer for type 'Int' with an argument list of type '(Array<Element>.Index?)'

一定要这么做

extension Int {
    var toInt: Int {
        return self
    }
}

then

guard let finalIndex = index?.toInt else {
    return false
}

tl; diana:

对于课程,你可能会寻找:

let index = someArray.firstIndex{$0 === someObject}

完整的回答:

我认为值得一提的是,对于引用类型(类),你可能想要执行一个标识比较,在这种情况下,你只需要在谓词闭包中使用===标识操作符:

Swift 5、Swift 4.2:

let person1 = Person(name: "John")
let person2 = Person(name: "Sue")
let person3 = Person(name: "Maria")
let person4 = Person(name: "Loner")

let people = [person1, person2, person3]

let indexOfPerson1 = people.firstIndex{$0 === person1} // 0
let indexOfPerson2 = people.firstIndex{$0 === person2} // 1
let indexOfPerson3 = people.firstIndex{$0 === person3} // 2
let indexOfPerson4 = people.firstIndex{$0 === person4} // nil

注意,上面的语法使用了尾随闭包语法,等价于:

let indexOfPerson1 = people.firstIndex(where: {$0 === person1})

Swift 4 / Swift 3 -该函数过去被称为index

Swift 2 -该函数过去被称为indexOf

*请注意paulbailey关于实现Equatable的类类型的相关和有用的评论,其中您需要考虑是否应该使用===(标识操作符)或==(相等操作符)进行比较。如果您决定使用==进行匹配,那么您可以简单地使用其他人(人们)建议的方法。firstIndex (: person1))。