iOS Swift - 减少功能

时间:2015-02-02 17:36:26

标签: ios swift reduce

我在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功能。任何解释或指导性文章/网页表示赞赏。

2 个答案:

答案 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。