ios - 如何快速使用reduce(into :)

标签 ios arrays swift reduce

我正在阅读有关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/

相关文章:

ios - iOS OC,如何将RLMObject转换为NSDictionary,NSArray?

ios - 无法使用 Swift 3 在 webView 中打印 PDF,需要带有初始值设定项的 baseURL

ios - 真的没有办法从照片库中检索照片的原始文件名吗?

java - 如何使用 for 每个循环查找数组中的重复元素

c# - 在 C# 中,如何将此数据结构转换为 Json

swift - 无法将类型 'SCNMatrix4' 的值转换为预期的参数类型 'matrix_float4x4'(又名 'simd_float4x4')

ios - UIView subview 的元素不可访问

ios - 如何切换自定义应用内键盘

char指针数组赋值

ios - 当前 View Controller 时关闭 View Controller 的问题