Swift,带有映射/高阶函数的 for 循环表达式

时间:2021-03-27 22:27:36

标签: arrays swift loops

考虑以下代码: 输出就是结果。

let array = [1, 5, 2]
var result = [Int]()
var stack = 0
array.forEach {
  result.append($0 + stack)
  stack += $0 + 1
}

有没有办法用 .map 或其他高阶函数来写那些?

let result = array.map { 
  // fill this up plz
}

2 个答案:

答案 0 :(得分:2)

可能是

let array = [1, 5, 2]
var stack = 0

let result: [Int] = array.map { 
    let res = $0 + stack
    stack += $0 + 1
    return res
}

答案 1 :(得分:2)

使用reduce(into:)

    let array = [1, 5, 2]
    let (stack,result) = array.reduce(into: (0,[Int]())) { (pair, i) in
        pair.1.append(i + pair.0)
        pair.0 += i + 1
    }
    print(stack)
    print(result)

(但请注意,问题不清楚。如果 stackresult 中的一个只是一个临时值,而您不需要它们都作为输出,则上述内容可以大大简化。 )