Swift中如何获取数组中的每第N个元素?
在Swift中提取数组的奇数索引元素
嘿,这个需求在Swift里有好几种简洁又高效的实现方式,我给你分享几个常用的方案:
方法1:结合enumerated()、filter和map
这是最直观的方式,先给数组的每个元素带上索引,再筛选出索引为奇数的元素,最后提取出对应的值:
let ar = [0,1,2,3,4,5,6,7,8,9] let newAr = ar.enumerated() .filter { $0.offset % 2 == 1 } .map { $0.element } // newAr 的结果是 [1, 3, 5, 7, 9]
enumerated()会将数组转换成包含**(索引, 元素)**的元组序列filter筛选出索引为奇数的元组(因为我们要从第2个元素开始取,对应索引1、3...)map把筛选后的元组里的元素提取出来,组成新数组
方法2:用stride生成目标索引
这种方法更高效,直接生成我们需要的索引序列,再通过索引取元素,不需要遍历整个数组:
let ar = [0,1,2,3,4,5,6,7,8,9] let newAr = stride(from: 1, to: ar.count, by: 2) .map { ar[$0] } // 结果同样是 [1, 3, 5, 7, 9]
stride(from: 1, to: ar.count, by: 2)会生成从1开始,步长为2的索引序列:1,3,5,7,9- 接着用
map根据这些索引从原数组中取出对应元素,组成新数组
方法3:手动遍历(适合新手理解逻辑)
如果想更清晰地看到每一步的操作,可以用手动循环的方式:
let ar = [0,1,2,3,4,5,6,7,8,9] var newAr = [Int]() for index in 1..<ar.count where index % 2 == 1 { newAr.append(ar[index]) } // newAr 最终为 [1, 3, 5, 7, 9]
这里我们从索引1开始遍历,只挑选奇数索引的元素添加到新数组中。
小提示
如果你的需求是从第一个元素开始取每第2个元素(也就是得到[0,2,4,6,8]),只需要把上面的索引条件改成偶数即可:
- 方法1中把
$0.offset % 2 == 1改成$0.offset % 2 == 0 - 方法2中把
stride(from: 1, ...)改成stride(from: 0, ...)
内容的提问来源于stack exchange,提问作者tePoloN
相关产品推荐
相关产品推荐

