我正在阅读有关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]]
根据文档,该闭包被依次调用,并带有一个可变的累加值,该累加值被初始化,并在耗尽时返回给调用者。
关于ios - 如何快速使用reduce(into :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62103658/