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

Swift中使用map遍历嵌套数组并获取元素及索引的方法

Swift嵌套数组遍历与map的正确用法

你当前的代码问题在于,第一个map只是原样返回每个子数组,所以后续的map依然在遍历子数组而非单个元素。要实现遍历嵌套数组的每个元素并打印索引,可按以下方式处理:

1. 仅获取所有单个元素(忽略所属子数组)

如果不需要关心元素属于哪个子数组,用flatMap可以直接将嵌套数组展平为一维数组,再遍历打印:

var raceResults = [["one","two","four"],["two","one","five","six"],["two","one","four","ten"],["one","two","four"]]

raceResults.flatMap { $0 }.forEach { print($0) }

flatMap会把每个子数组的元素依次取出,合并成一个新的一维数组,后续的forEach就能逐个访问单个元素。

2. 打印元素及其在子数组中的索引(含子数组自身索引)

如果需要同时知道元素属于哪个子数组,以及它在该子数组中的位置,结合enumerated()和链式调用即可:

raceResults.enumerated()
    .flatMap { groupIndex, group in
        // 给每个元素绑定子数组索引和自身索引
        group.enumerated().map { elementIndex, element in
            (groupIndex: groupIndex, elementIndex: elementIndex, value: element)
        }
    }
    .forEach { item in
        print("子数组[\(item.groupIndex)] 元素索引[\(item.elementIndex)]:\(item.value)")
    }

这里先用enumerated()获取每个子数组的索引(groupIndex),再对每个子数组用enumerated()获取内部元素的索引,将这些信息包装成元组后用flatMap展平,最后遍历打印所有元组信息。

注意:map vs forEach

你的代码里用map来执行打印操作其实不符合语义——map的核心是转换数组元素,而打印是副作用操作,更适合用forEach。如果只是为了遍历执行打印,直接用嵌套forEach更简洁:

raceResults.enumerated().forEach { groupIndex, group in
    group.enumerated().forEach { elementIndex, element in
        print("子数组[\(groupIndex)] 元素索引[\(elementIndex)]:\(element)")
    }
}

内容的提问来源于stack exchange,提问作者user1845926

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:36:26