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

Swift中如何将数组分割为指定的两个目标子数组?

解决Swift数组按索引奇偶分割的问题

你的需求是将原数组按元素的原始索引奇偶性分割成两个数组:索引为偶数(0、2、4...)的元素放入listItems1,索引为奇数(1、3、5...)的放入listItems2。但你当前的chunked分组方式逻辑不符合这个需求,导致10被错误分到listItems1里,下面是修正方案:

问题分析

你当前的chunked(into: 2)会把原数组分成每2个元素一组:

[[1,3], [2,4], [5,7], [6,8], [9,10]]

之后筛选offset为偶数的组(第0、2、4组),flatMap后得到[1,3,5,7,9,10],这和你期望的结果不符——因为最后一组[9,10]的offset是4(偶数),所以整个组都被加入listItems1,导致10出现在错误的数组中。

正确实现方式

直接遍历原数组的索引,根据索引的奇偶性筛选元素,这是最直接且符合需求的方式:

let arrays1 = [1, 3, 2, 4, 5, 7, 6, 8, 9, 10]

// 筛选索引为偶数的元素(0、2、4、6、8)
let listItems1 = arrays1.enumerated().filter { $0.offset % 2 == 0 }.map { $0.element }
// 筛选索引为奇数的元素(1、3、5、7、9)
let listItems2 = arrays1.enumerated().filter { $0.offset % 2 != 0 }.map { $0.element }

运行后结果完全符合你的期望:

listItems1 = [1, 2, 5, 6, 9]
listItems2 = [3, 4, 7, 8, 10]

简化写法(可选)

如果你想更简洁,可以用reduce一次完成两个数组的分割,避免两次遍历:

let (listItems1, listItems2) = arrays1.enumerated().reduce(into: ([Int](), [Int]())) { result, pair in
    if pair.offset % 2 == 0 {
        result.0.append(pair.element)
    } else {
        result.1.append(pair.element)
    }
}

这种方式只遍历数组一次,性能更优,尤其当数组元素较多时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:38:21