一尘不染

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

swift

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

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


阅读 358

收藏
2020-07-07

共1个答案

一尘不染

由于Swift在某些方面要比面向对象的功能更强大(并且Array是结构而不是对象),因此请使用“
find”函数对数组进行操作,该数组将返回可选值,因此请准备处理nil值:

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

Swift 2.0更新:

find Swift 2.0不再支持旧功能!

使用Swift 2.0,Array可以使用扩展中定义的函数CollectionTypeArray实现)来找到元素的索引:

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不再使用它,而是将其分开firstIndexlastIndex进行更好的说明。因此,根据您要查找的项目的第一个还是最后一个索引:

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

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