让我们拿一下阵列:
var myArray = ["a", "b", "c", "a", "b", "a", "b", "c", "a", "b"]
我知道您需要使用.contains()来了解数组是否包含对象。
myArray.contains("a") //true
但是如何知道数组是否包含4次“a”?
答案 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
中包含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")