[我正在阅读有关Swift的iOS 13编程基础知识,涉及关于reduce()的部分,我想我或多或少地了解它,但是接下来有reduce(into :)和这段代码:
let nums = [1,2,3,4,5]
let result = nums.reduce(into: [[],[]]) { temp, i in
temp[i%2].append(i)
}
// result is now [[2,4],[1,3,5]]
因此,此代码采用一个Int数组,并将其分成2个偶数和奇数数组。问题是我不知道括号{}中发生了什么。
在reduce的情况下,第一个参数是迭代的第一个参数,然后闭包应该一个接一个地处理所有项目,类似于map(),但功能更强大(这里一个循环足以获取这两个数组,但使用map(),根据书,我将需要2个循环。
我仍然无法理解这里的语法,尤其是“ temp”代表什么以及“ in”的使用。以及“ append()”如何将值附加到适当的数组?
[在闭包内,“ temp”是结果格式,它是[[] []],“ i”是每个数字。如您所说,它循环处理所有数字。当使用%时,它返回除法余数,因此对于像“ 1,3,5”这样的奇数,它返回“ 1”,对于偶数“ 0”,这意味着“ temp”将这些值附加到数组中在这些相应的索引中。
因此,如果我们调试并将变量替换为常量,结果将是:
temp[1].append(1) //1%2 = 1/2 left 1 [[][1]]
temp[0].append(2) //2%2 = 2/2 left 0 [[2][1]]
temp[1].append(3) //3%2 = 3/2 = 1 left 1 [[2][1,3]]
temp[0].append(4) //4%2 = 4/2 left 0 [[2,4][1,3]]
temp[1].append(5) //5%2 = 5/2 = 2 left 1 [[2,4][1,3,5]]
根据文档,使用可变的累加值对闭包进行顺序调用,该累加的值初始化后将其耗尽,然后将其返回给调用方。