swift - 如何检查数组是否包含第n个字符串?

时间:2016-12-19 14:55:39

标签: arrays swift

让我们拿一下阵列:

var myArray = ["a", "b", "c", "a", "b", "a", "b", "c", "a", "b"]

我知道您需要使用.contains()来了解数组是否包含对象。 myArray.contains("a") //true

但是如何知道数组是否包含4次“a”?

4 个答案:

答案 0 :(得分:5)

在Swift中,只需一行代码即可找到:

myArray.filter{$0 == "a"}.count 

希望它有所帮助。享受编码

答案 1 :(得分:5)

其他答案中显示的Transformers.toJson()解决方案很整洁,适合此目的。我还会提供更多选择。

作为另一种选择,使用一个带有filter条件的简单for ... in循环来保存条件以增加计数器:

where

或者,作为另一种选择,请使用let myArray = ["a", "b", "c", "a", "b", "a", "b", "c", "a", "b"] var count = 0 for element in myArray where element == "a" { count += 1 } print(count) //4

reduce

我还会在@user28434's answer

中包含let myArray = ["a", "b", "c", "a", "b", "a", "b", "c", "a", "b"] let count = myArray.reduce(0) { $0 + ($1 == "a" ? 1 : 0) } print(count) //4 集的使用示例
NSCounted

答案 2 :(得分:1)

您可以使用NSCountedSet

  

概述

     

插入NSCountedSet对象的每个不同对象都有一个与之关联的计数器。 NSCountedSet会跟踪插入对象的次数,并要求删除相同次数的对象。因此,即使对象已多次添加到集合中,NSSet对象中也只有一个对象实例。由超类NSSet定义的count方法具有特殊意义;它返回不同对象的数量,而不是对象在集合中表示的总次数。 NSSet和NSMutableSet类分别为静态和动态集提供,其元素是不同的。

     

虽然NSCountedSet和CFBag没有免费桥接,但它们提供类似的功能。有关CFBag的更多信息,请参阅CFBag。

let countedSet = NSCountedSet(array: myArray)
let countOfA = countedSet.count(for: "a") // returns 4

作为非通用的Objective C类型,它会擦除​​类型,所以请谨慎使用。

答案 3 :(得分:0)

在解决这样的问题时,我通常使用filter创建一个只包含“a”元素的新数组,然后只需在新数组上调用count

let count = myArray.filter({$0 == "a"}).count
print("The element 'a' occurs \(count) times")