Swift LazyMapCollection方法减少

时间:2016-03-17 18:19:09

标签: swift swift2

有人可以描述这个操作实际上是做什么的。据我所知,它是一张地图,但实际上valuesreduce的意思是什么。据我所知,它以封闭为参数对吧?

let result = self.myDictionary.values.reduce(0) { (count, objectInMyDictionary) in
        return count + objectInMyDictionary.totalObjects
}

我们假设我有一本字典:

["key1": Object1]
["key2": Object1]
["key3": Object1]
...

据我所知,上面的方法将作为myDictionary中所有对象的迭代器。所以实际上我可以通过循环来做到这一点我想,结果会是一样的。有什么区别,这个展位的优势是什么。对不起,我是斯威夫特的新人。

let count : Int = 0
for (_, objectInMyDictionary) in self.myDictionary {
      count += objectInMyDictionary.totalObjects
}

1 个答案:

答案 0 :(得分:3)

所有四种序列迭代方法 - map(和flatMap),forEachfilterreduce - 在理论上和实际上做事< em>可以通过使用for in编写自己的迭代来完成。 for in本身可以随时扩展为while和生成器。

但仅仅因为你可以做某事并不代表你想要。拥有这些方法很方便,可以说更清晰,并将命令式操作转变为功能性操作。

[考虑到您的示例的reduce版本是单行,其结果是作为常量的答案,而for版本要求变量存储为预先搁置。如果你没有看到for版本只是简单笨重,那么对于那些喜欢那种东西的人来说,这就是他们喜欢的东西。]

此外,迭代方法显然更为通用,因为任何函数(适当形式)都可以插入其中。它们只是简单地说明了一个共同的需求。