如何使index(of:)返回多个索引?获取数组中"A"的全部索引方法
获取数组中所有匹配元素的索引方案
嗨,这个问题我之前也碰到过!确实index(of:)只能返回第一个匹配元素的索引,要拿到所有匹配项的索引,咱们可以用几种不同的方法来实现,我给你整理几个常用的方案:
方法一:手动遍历枚举(最直观)
通过enumerated()方法遍历数组,它会返回每个元素的索引和对应的值,我们只需要判断值是否为"A",是的话就把索引存入结果数组:
let group = ["A", "B", "A", "C", "A", "D", "A"] var allIndices: [Int] = [] for (index, element) in group.enumerated() { if element == "A" { allIndices.append(index) } } print(allIndices) // 输出: [0, 2, 4, 6]
方法二:链式调用(简洁优雅)
用enumerated()+filter()+map()的链式组合,一步到位得到所有目标索引:
let group = ["A", "B", "A", "C", "A", "D", "A"] let allIndices = group.enumerated() .filter { $0.element == "A" } // 筛选出元素为"A"的枚举项 .map { $0.offset } // 提取这些项的索引 print(allIndices) // 输出: [0, 2, 4, 6]
方法三:用reduce累积结果(Swift 5+适用)
如果喜欢函数式编程风格,也可以用reduce(into:)来累积符合条件的索引:
let group = ["A", "B", "A", "C", "A", "D", "A"] let allIndices = group.enumerated().reduce(into: [Int]()) { result, pair in if pair.element == "A" { result.append(pair.offset) } } print(allIndices) // 输出: [0, 2, 4, 6]
补充说明
index(of:)的设计逻辑是找到第一个匹配元素就立即返回,所以无法直接获取所有匹配项的索引。上面的几种方法都是通过遍历整个数组,筛选出所有符合条件的索引,完美解决你的需求~
内容的提问来源于stack exchange,提问作者jamryu
相关产品推荐
相关产品推荐

