我在SWIFT中有一段代码,我不明白:
var peers: [String:NSSet] = [:]
for s in squares {
var ps = reduce(units[s]!, NSMutableSet()) { set, u in
set.addObjectsFromArray(u)
return set
}
ps.removeObject(s)
peers[s] = ps
}
squares
是一个String数组。
到目前为止,我已经意识到peers
可能是一个键/值数据结构,其中包含String键和NSSet值。 NSSet类似于Array,但它不能接受重复的项目。我不理解的主要部分实际上是reduce
功能。任何解释或指导性文章/网页表示赞赏。
答案 0 :(得分:2)
reduce
是一种方法,用于使用您提供的运算符将数组简化为单个值,以构造最终结果。教程中提供的大多数演示使用+
或*
将数字数组缩减为单个和或乘法结果。
您正在使用的方法采用输入数组units[s]
和初始值NSMutableSet()
(空集),然后按顺序将闭包应用于每个元素。
您的代码似乎表明units[s]
的元素又是数组;所以你的数据看起来像这样:
units[s]: [
[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 3, 5, 7]
]
让ps
成为:
ps: [ 1, 2, 3, 4, 5, 6, 7, 8 ]
在reduce
来电后。
答案 1 :(得分:1)
var ps = reduce(units[s]!, NSMutableSet()) { set, u in
set.addObjectsFromArray(u)
return set
}
Reduce将第一个参数中的数组元素(units [s]应该是一个数组)组合成第二个参数(这里是NSMutableSet)。下面的花括号中的代码说明了如何组合元素。 "设置"和"你"参考单位[s]和NSMutable集。因此,它将每个元素以单位[s]为单位并将它们添加到NSMutableSet。