考虑以下代码: 输出就是结果。
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
}
答案 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)
(但请注意,问题不清楚。如果 stack
和 result
中的一个只是一个临时值,而您不需要它们都作为输出,则上述内容可以大大简化。 )