【问题标题】:How do I use keysSortedByValue in Swift 3.0?如何在 Swift 3.0 中使用 keysSortedByValue?
【发布时间】:2016-12-09 01:31:29
【问题描述】:

我有这段代码用于获取 nsdictionary 中的最高值并添加到 NSdictionaries 数组中。转换为 swift 3 后它给了我一个错误。

self.array = (self.dict!).keysSortedByValue
                        (comparator: {
                            ($1 ).compare($0 )
                    })

我得到一个模棱两可的参考错误。比较器的格式似乎有问题,但我不知道如何更改它..有人知道吗?

【问题讨论】:

  • self.array 的类型是什么?
  • 抱歉,这是一个 nsdictionaries 数组
  • 我只是将这个应用程序更新到 swift 3 并且附加了更多代码,这是我得到的最后一个错误,所以如果我能得到这个工作它会拯救我重写一大堆东西哈哈

标签: ios arrays sorting swift3 nsdictionary


【解决方案1】:

编译器可能无法推断出$0 和$1,因为函数类型是(Any, Any),不能使用compare。因此,您必须将它们转换为 String(或您使用的任何符合 compare 的类型),然后返回到 Any

let dict: NSDictionary = ["3" : "Orange", "1" : "Apple", "2" : "Pear"]
let keys = dict.keysSortedByValue(comparator: { (key1: String, key2: String) in
    return key1.compare(key2)
} as! (Any, Any) -> ComparisonResult)
print(keys)

如果我使用 Swift,我更喜欢 Swift 字典。

let swiftDict = ["3" : "Orange", "1" : "Apple", "2" : "Pear"]
let swiftKeys = swiftDict.sorted(by: { $0.0 < $1.0 })

【讨论】:

  • 第一部分不起作用,但我尝试只使用普通字典,因为它看起来更简单
  • 如何按值排序?这就是原始代码所做的
【解决方案2】:

这就是最终工作的结果。我无法让它与 NSDictionary 一起使用,所以采纳了 Frankie 的建议,只使用了普通的字典。然后使用此代码对其进行排序,然后将其附加到数组中。

self.dict = snapshot.value as? Dictionary
let sorted = self.dict.flatMap({$0})?.sorted { $0.0.1 > $0.1.1 }
for (name, value) in sorted! {
     self.array.append(name)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    相关资源
    最近更新 更多