【问题标题】:Swift 3 - Reduce an array to a dictionary with a count of unique elementsSwift 3 - 将数组减少为具有唯一元素计数的字典
【发布时间】:2017-05-16 07:49:39
【问题描述】:

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

“.freq”扩展名返回以下格式的字典。

["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 是一个 let 常量

我确信它可能是一个简单的修复,但似乎无法在 swift3 中找到相关示例。

【问题讨论】:

    标签: ios dictionary swift3


    【解决方案1】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多