Swift 3 - 将数组减少为具有唯一元素数的字典

时间:2017-01-02 07:27:46

标签: ios dictionary swift3

我目前正在将当前项目迁移到Swift3(从2.3开始),并且我的序列类型扩展存在一些问题。 该扩展旨在从源数组返回唯一值的字典。 即var myArray = ["Apple","Apple","Orange","Banana","Banana"]

" .freq" extension以下列格式返回字典。

["Apple":2,"Orange":1,"Banana":2]

以下是当前的Swift 2.3语法:

extension Sequence where Self.Iterator.Element: Hashable {

    func freq() -> [Self.Iterator.Element: Int] {
        return reduce([:]) { ( accu: [Self.Iterator.Element: Int], element) in
            accu[element] = (accu[element]? + 1) ?? 1
            return accu
        }
    }
}

问题是由于语法更改,行accu[element] = (accu[element]? + 1) ?? 1在Swift 3中不起作用:

  

不能通过下标分配:accu是一个常量

我确定它可能很容易解决,但似乎无法找到如何在swift3中执行此操作的相关示例。

1 个答案:

答案 0 :(得分:3)

试试这个:

extension Sequence where Self.Iterator.Element: Hashable {

func freq() -> [Self.Iterator.Element: Int] {
    return reduce([:]) {
            ( accu: [Self.Iterator.Element: Int], element) in
            var accu2 = accu
            accu2[element] = (accu2[element] ?? 0) + 1
            return accu2
        }
    }
}