如何计算在Swift在阵列的具体项目

问题描述 投票:3回答:3

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

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

是否有一个快速的短期办法做这样的事情下面?

Oses.count["Android"]   // 3 
arrays swift collections
3个回答
16
投票

快速,紧凑和优雅的方式来做到这一点是通过使用reduce方法:

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

它比for循环更加紧凑,比filter更快,因为它不会产生一个新的数组。

reduce方法需要一个初始值,在我们的情况下为0,和封闭,施加到所述阵列的每个元素。

封闭件需要两个参数:

  • 在前次迭代的值(或在我们的情况下的初始值,0)
  • 用于当前迭代的数组元素

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

封闭件简单地检查如果当前元素是Android

  • 如果没有,它返回总值(传递给闭合第一个参数)
  • 如果是,它返回数加一

5
投票

这是很简单的用.filter

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

0
投票

斯威夫特5 count(where:)

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

迅速4或更小filter(_:)

let countOfAndroid = OSes.filter({ $0 == "Android" }).count 
© www.soinside.com 2019 - 2024. All rights reserved.