Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组中的Swift 2计数重复_Arrays_Swift_Count_Duplicates - Fatal编程技术网

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
        }
    }
}