Arrays 数组中的Swift 2计数重复
你能帮我简化下面的流程吗? 范围是计算给定数组中每个元素重复的次数Arrays 数组中的Swift 2计数重复,arrays,swift,count,duplicates,Arrays,Swift,Count,Duplicates,你能帮我简化下面的流程吗? 范围是计算给定数组中每个元素重复的次数 var test = [1,2,3,4,5,6,7,8,5,9,3,3,9,9,9] var testCount = [Int:Int]() for curr in test { if let x = testCount[curr] { testCount[curr] = x + 1 continue; } testCount[curr] = 1 } print(t
var test = [1,2,3,4,5,6,7,8,5,9,3,3,9,9,9]
var testCount = [Int:Int]()
for curr in test {
if let x = testCount[curr] {
testCount[curr] = x + 1
continue;
}
testCount[curr] = 1
}
print(testCount)
我正在进行这项工作,以便获得类似以下内容:
test.map_duplicate() or map_duplicate(test)
上面的代码提供了对任何
数组
类型的扩展,该类型包含可散列
元素(任何其他内容都不能作为字典的键)。方法mergeDuplicates
生成所需的字典。在其实现中,forEach()
对数组中的每个元素执行闭包(这通常比老式的for循环更直接、更透明)。然后,在每次迭代中,我们检查字典中是否已经存在具有运行计数的值(并使用nil coalescing操作符?
来处理以前未满足特定值的情况,因此该值为零)。然后递增,并存储(返回)到字典中。您可以扩展SequenceType,使其具有一个函数freq,它正好满足您在这里的需要
var countForNumber = 0
for number in test {
test.forEach({ if number == $0 { countForNumber++ } })
testCount[number] = countForNumber
countForNumber = 0
}
extension SequenceType where Self.Generator.Element: Hashable {
func freq() -> [Self.Generator.Element: Int] {
return reduce([:]) { (var accu: [Self.Generator.Element: Int], element) in
accu[element] = accu[element]?.successor() ?? 1
return accu
}
}
}
谢谢一只小虫子。self.forEach{result[$0]=(result[$0]??0)+1}
extension SequenceType where Self.Generator.Element: Hashable {
func freq() -> [Self.Generator.Element: Int] {
return reduce([:]) { (var accu: [Self.Generator.Element: Int], element) in
accu[element] = accu[element]?.successor() ?? 1
return accu
}
}
}