假设我有下面任何对象的数组,我正在寻找一种方法来计算数组中的项目,如下所示:
var OSes = ["iOS", "Android", "Android","Android","Windows Phone", 25]
有没有一种快捷方式可以让 swift 做下面这样的事情?
Oses.count["Android"] // 3
一种快速、紧凑且优雅的方法是使用reduce
method:
let count = OSes.reduce(0) { $1 == "Android" ? $0 + 1 : $0 }
它比一个更紧凑for
循环,并且比filter
,因为它不会生成新数组。
The reduce
方法采用一个初始值(在我们的例子中为 0)和一个应用于数组的每个元素的闭包。
闭包有 2 个参数:
- 上一次迭代的值(或初始值,在我们的例子中为 0)
- 当前迭代的数组元素
闭包返回的值用作下一次迭代的第一个参数,或者作为reduce
处理完最后一个元素时的方法
闭包只是检查当前元素是否是Android
:
- 如果不是,则返回聚合值(传递给闭包的第一个参数)
- 如果是,则返回该数字加一
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)