假设我有下面任何对象的数组,我正在寻找一种方法来计算数组中的项目如下:
var OSes = ["iOS", "Android", "Android","Android","Windows Phone", 25]
快速做下面这样的事情还有一个简短的方法吗?
Oses.count["Android"] // 3
答案 0 :(得分:16)
快速,紧凑和优雅的方法是使用reduce
方法:
let count = OSes.reduce(0) { $1 == "Android" ? $0 + 1 : $0 }
它比for
循环更紧凑,比filter
更快,因为它不会生成新数组。
reduce
方法取一个初始值,在我们的例子中为0,并且一个闭包应用于数组的每个元素。
闭包需要2个参数:
闭包返回的值用作下一次迭代中的第一个参数,或者作为处理最后一个元素时reduce
方法的返回值
闭包只是检查当前元素是否为Android
:
答案 1 :(得分:4)
使用.filter
非常简单:
OSes.filter({$0 == "Android"}).count // 3
答案 2 :(得分:0)
let countOfAndroid = OSes.count(where: { $0 == "Android" })
扫描4或以下
let countOfAndroid = OSes.filter({ $0 == "Android" }).count