如何用for循环从起始位置开始跳过数组中指定数量的元素?
Swift 实现数组按指定规则跳过元素的遍历
问题说明
给定这个Int类型数组:
let array: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
需要编写一个for循环,从起始位置开始每隔2个元素进行跳过操作,预期输出结果为:
0, 1, 4, 5, 8, 9, 12, 13, 16, 17
先看一个错误示例(逻辑不符合需求):
var result: [Int] = [] for i in stride(from: 0, to: array.count, by: 2) { result.append(i) } print(result)
正确实现方案
先明确需求逻辑:每连续取2个元素,就跳过接下来的2个元素,重复这个操作直到数组末尾。
可以通过控制索引步长来实现,代码如下:
let array: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] let takeCount = 2 // 每次要取的元素个数 let skipCount = 2 // 每次要跳过的元素个数 var result: [Int] = [] // 外层循环控制每组的起始索引,步长为取的数量加跳过的数量 for i in stride(from: 0, to: array.count, by: takeCount + skipCount) { // 内层循环将当前组的元素加入结果数组 for j in 0..<takeCount { let currentIndex = i + j // 防止数组越界,索引超出则停止当前组的添加 guard currentIndex < array.count else { break } result.append(array[currentIndex]) } } // 输出格式化后的结果 print(result.map { String($0) }.joined(separator: ", "))
代码解释
- 外层用
stride控制索引跳转,步长设为takeCount + skipCount,确保每次循环直接定位到下一组要取元素的起始位置,自动跳过指定数量的元素。 - 内层循环负责将当前组的元素逐个加入结果,
guard判断是为了处理数组末尾元素不足一组的情况,避免越界访问。 - 最后通过
map和joined将结果数组格式化为预期的字符串形式输出。
灵活调整
如果需要修改规则(比如每取1个元素跳过3个),只需调整takeCount和skipCount的数值即可,核心逻辑无需改动。
内容的提问来源于stack exchange,提问作者Wael
相关产品推荐
相关产品推荐

