Swift中将数组拆分为两个子数组出错,如何修正代码?
问题分析与修正
你的代码核心错误有两个:
- 你把数组的索引值(
i)直接添加到了firstArray和secondArray里,而不是取totalArray中对应索引的元素值 append(contentsOf: [i])属于冗余写法,单个元素直接用append()就够了
修正后的循环版本代码:
let totalArray = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10] var firstArray = [Int]() var secondArray = [Int]() for i in totalArray.indices { if i <= totalArray.count/2 { firstArray.append(totalArray[i]) // 改为取对应索引的元素 } else { secondArray.append(totalArray[i]) } } print(firstArray) // 输出 [20, 19, 18, 17, 16, 15] print(secondArray) // 输出 [14, 13, 12, 11, 10]
更简洁的Swift风格写法
Swift数组自带prefix和suffix方法,能直接拆分数组,不用手动写循环:
let totalArray = [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10] let splitIndex = totalArray.count / 2 + 1 // 数组长度为奇数,前半部分多一个元素 let firstArray = Array(totalArray.prefix(splitIndex)) let secondArray = Array(totalArray.suffix(from: splitIndex)) print(firstArray) // [20, 19, 18, 17, 16, 15] print(secondArray) // [14, 13, 12, 11, 10]
这里因为totalArray长度是11(奇数),totalArray.count/2等于5,所以前半部分取前6个元素,后半部分从索引6开始取剩余元素。
内容的提问来源于stack exchange,提问作者Swift
相关产品推荐
相关产品推荐

