Swift中如何获取循环当前位置以读取另一数组同索引元素
问题解决:Swift同步遍历两个数组对应位置元素
现有代码的问题
你当前的代码使用1..<colours.count作为循环区间,由于Swift数组下标从0开始,会直接漏掉两个数组的首元素(也就是下标为0的"Red"和1)。
正确实现方案
方案1:直接修正循环区间(适合确定两个数组长度完全一致的场景)
直接把循环起始值改成0即可:
let colours = ["Red", "Blue", "Green", "Green"] let status = [1, 2, 2, 1] func newFunc() { // 下标从0开始遍历 for i in 0..<colours.count { print(colours[i]) print(status[i]) } }
方案2:用zip函数同步遍历(更安全,推荐)
zip会将两个数组按位置配对,自动以较短的数组长度为准,避免数组越界崩溃,不需要手动处理下标:
let colours = ["Red", "Blue", "Green", "Green"] let status = [1, 2, 2, 1] func newFunc() { for (colour, statusValue) in zip(colours, status) { print(colour) print(statusValue) } }
方案3:用enumerated同时获取下标和元素
如果遍历过程中除了取对应status元素,还需要用到下标做其他操作,可以用enumerated()方法:
let colours = ["Red", "Blue", "Green", "Green"] let status = [1, 2, 2, 1] func newFunc() { for (index, colour) in colours.enumerated() { print("当前下标:\(index)") print(colour) print(status[index]) } }
注意事项
如果不能保证两个数组长度完全相等,不要使用按下标取值的方案1和方案3,否则会触发数组越界崩溃,优先选择zip方案。
内容的提问来源于stack exchange,提问作者user15578084
相关产品推荐
相关产品推荐

