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

Swift数组修改需求:在负数前插入正值并统计插入元素数量

Swift数组处理:负数前插入对应正数并统计插入数量

先直接给出结论:

  • .filter方法完全不适用:它仅用于筛选元素,只能保留或丢弃原数组元素,无法完成插入新元素的需求。
  • .map方法本身无法实现:map是一对一的元素映射逻辑,而我们需要对负数做一对二的处理(插入对应正数+保留原负数),不过可以用flatMap(函数式风格)替代,但统计插入数量需要额外步骤。
  • for-in循环是最直观高效的选择:遍历过程中可同时完成数组构建和插入计数,逻辑清晰,便于调试和维护。

1. for-in循环实现(推荐)

一次遍历即可完成所有操作,无需额外计算插入数量:

var arrayInt: [Int] = [22, 16, -39, 1, -200]
var resultArray: [Int] = []
var insertCount = 0

for num in arrayInt {
    if num < 0 {
        resultArray.append(-num)
        insertCount += 1
    }
    resultArray.append(num)
}

print(resultArray) // 输出:[22, 16, 39, -39, 1, 200, -200]
print("插入元素数量:\(insertCount)") // 输出:2

2. flatMap函数式实现

如果偏好函数式编程风格,可通过flatMap将每个元素转换为数组后展平,但插入数量需单独统计原数组的负数个数:

let arrayInt: [Int] = [22, 16, -39, 1, -200]
let resultArray = arrayInt.flatMap { num -> [Int] in
    num < 0 ? [-num, num] : [num]
}
// 每个负数对应插入一个元素,直接统计原数组负数数量即可
let insertCount = arrayInt.filter { $0 < 0 }.count

print(resultArray) // 输出:[22, 16, 39, -39, 1, 200, -200]
print("插入元素数量:\(insertCount)") // 输出:2

为什么不用单纯的.map?

map要求每个输入元素对应唯一的输出元素,无法实现一个负数对应两个输出元素(正数+原负数)的逻辑,因此单纯的map无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:50:30