开发者社区> 问答> 正文

如何在Swift中找到列表项的索引?

我正在尝试item index通过搜索找到一个list。有人知道该怎么做吗?

我看到了list.StartIndex,list.EndIndex但是我想要类似python的东西list.index("text")。

展开
收起
保持可爱mmm 2020-01-14 14:54:52 419 0
1 条回答
写回答
取消 提交回答
  • 由于Swift在某些方面比面向对象的功能更强大(并且Array是结构,而不是对象),因此请使用函数“ find”对数组进行操作,该数组将返回一个可选值,因此请准备处理nil值:

    let arr:Array = ["a","b","c"] find(arr, "c")! // 2 find(arr, "d") // nil

    Swift 2.0更新:

    findSwift 2.0不再支持旧功能!

    使用Swift 2.0,Array可以使用扩展CollectionType(定义为)中定义的函数来查找元素的索引Array:

    let arr = ["a","b","c"]

    let indexOfA = arr.indexOf("a") // 0 let indexOfB = arr.indexOf("b") // 1 let indexOfD = arr.indexOf("d") // nil

    此外,另一个扩展支持在数组中找到满足谓词的第一个元素CollectionType:

    let arr2 = [1,2,3,4,5,6,7,8,9,10] let indexOfFirstGreaterThanFive = arr2.indexOf({$0 > 5}) // 5 let indexOfFirstGreaterThanOneHundred = arr2.indexOf({$0 > 100}) // nil

    请注意,这两个函数像find以前一样返回可选值。

    Swift 3.0更新:

    注意indexOf的语法已更改。对于符合条件的物品,Equatable可以使用:

    let indexOfA = arr.index(of: "a")

    有关该方法的详细文档,请参见https://developer.apple.com/reference/swift/array/1689674-index

    对于不符合条件的数组项,Equatable您需要使用index(where:):

    let index = cells.index(where: { (item) -> Bool in item.foo == 42 // test if this is the item you're looking for })

    Swift 4.2更新:

    在Swift 4.2中,index不再使用它,而是将其分开firstIndex并lastIndex进行更好的说明。因此,根据您要查找的项目的第一个还是最后一个索引:

    let arr = ["a","b","c","a"]

    let indexOfA = arr.firstIndex(of: "a") // 0 let indexOfB = arr.lastIndex(of: "a") // 3

    问题来源于stack overflow

    2020-01-14 14:55:14
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
OpenStack Swift 海量小文件优化之路 立即下载
From Java/Android to Swift iOS 立即下载
Swift在Airbnb的应用实践 立即下载