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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:08:11