【问题标题】:iOS Swift - Reduce functioniOS Swift - 减少函数
【发布时间】:2015-04-01 17:40:08
【问题描述】:

我在 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 是一个字符串数组。

到目前为止,我已经意识到peers 可能是一个键/值数据结构,键为字符串,值为 NSSet。 NSSet 类似于 Array 但它不能接受重复项。我不明白的主要部分实际上是reduce 函数。任何解释或指导性文章/网页表示赞赏。

【问题讨论】:

    标签: ios swift reduce


    【解决方案1】:

    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 之后。

    【讨论】:

      【解决方案2】:
      var ps = reduce(units[s]!, NSMutableSet()) { set, u in
          set.addObjectsFromArray(u)
          return set
        }
      

      Reduce 将第一个参数中的数组元素(units[s] 应该是一个数组)组合到第二个参数(这里是 NSMutableSet)中。后面的大括号中的代码说明了如何组合元素。 “set”和“u”指的是units[s]和NSMutable set。因此它以单位[s] 为单位获取每个元素并将它们添加到 NSMutableSet。

      【讨论】:

        猜你喜欢
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 2014-08-04
        • 1970-01-01
        • 2020-05-13
        • 2020-10-05
        • 1970-01-01
        相关资源
        最近更新 更多