如何计算 swift 数组中的特定项目

how to count specific items in array in swift

假设我有以下任何对象的数组,我正在寻找一种方法来计算数组中的项目,如下所示:

var OSes = ["iOS", "Android", "Android","Android","Windows Phone", 25]

是否有 swift 执行下面类似操作的捷径?

Oses.count["Android"]   // 3 

使用 .filter 非常简单:

OSes.filter({[=10=] == "Android"}).count // 3

一种快速、紧凑和优雅的方法是使用 reduce 方法:

let count = OSes.reduce(0) {  == "Android" ? [=10=] + 1 : [=10=] }

它比 for 循环更紧凑,比 filter 更快,因为它不会生成新数组。

reduce 方法采用初始值(在我们的例子中为 0)和一个闭包,应用于数组的每个元素。

闭包有两个参数:

  • 前一次迭代的值(或初始值,在我们的例子中为 0)
  • 当前迭代的数组元素

由闭包编辑的值 return 用作下一次迭代的第一个参数,或者当最后一个元素已被删除时用作 reduce 方法的 return 值已处理

闭包简单地检查当前元素是否为Android

  • 如果不是,它return是聚合值(传递给闭包的第一个参数)
  • 如果是,return是那个数字加一

Swift 5count(where:)

let countOfAndroid = OSes.count(where: { [=10=] == "Android" })

Swift 4 或更少filter(_:)

let countOfAndroid = OSes.filter({ [=11=] == "Android" }).count