You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:50