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

时间:2015-07-02 21:28:10

标签: arrays swift collections

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

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

快速做下面这样的事情还有一个简短的方法吗?

Oses.count["Android"]   // 3 

3 个答案:

答案 0 :(得分:16)

快速,紧凑和优雅的方法是使用reduce方法:

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

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

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

闭包需要2个参数:

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

闭包返回的值用作下一次迭代中的第一个参数,或者作为处理最后一个元素时reduce方法的返回值

闭包只是检查当前元素是否为Android

  • 如果没有,则返回聚合值(传递给闭包的第一个参数)
  • 如果是,则返回该号码加一个

答案 1 :(得分:4)

使用.filter非常简单:

OSes.filter({$0 == "Android"}).count // 3

答案 2 :(得分:0)

使用count(where:)

迅速5
let countOfAndroid = OSes.count(where: { $0 == "Android" })

filter(_:)

扫描4或以下
let countOfAndroid = OSes.filter({ $0 == "Android" }).count