有人可以描述这个操作实际上是做什么的。据我所知,它是一张地图,但实际上values
和reduce
的意思是什么。据我所知,它以封闭为参数对吧?
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
}
答案 0 :(得分:3)
所有四种序列迭代方法 - map
(和flatMap
),forEach
,filter
和reduce
- 在理论上和实际上做事< em>可以通过使用for in
编写自己的迭代来完成。 for in
本身可以随时扩展为while
和生成器。
但仅仅因为你可以做某事并不代表你想要。拥有这些方法很方便,可以说更清晰,并将命令式操作转变为功能性操作。
[考虑到您的示例的reduce
版本是单行,其结果是作为常量的答案,而for
版本要求变量存储为预先搁置。如果你没有看到for
版本只是简单笨重,那么对于那些喜欢那种东西的人来说,这就是他们喜欢的东西。]
此外,迭代方法显然更为通用,因为任何函数(适当形式)都可以插入其中。它们只是简单地说明了一个共同的需求。