微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 按值排序字典键,然后按键排序

我想迭代字典的键,首先按值(降序)排序,然后按键(升序)排序
让dict = [“foo”:1,“bar”:1,“baz”:2,“qux”:2]

迭代的顺序应该是:
[“baz”,“qux”,“bar”,“foo”]

我想打印:

baz 2
qux 2
bar 1
foo 1
Xcode 8 beta 6•Swift 3•Swift 4
extension Dictionary where Value: Comparable {
    var valueKeySorted: [(Key,Value)] {
        return sorted{ if $0.value != $1.value { return $0.value > $1.value } else { return String(describing: $0.key) < String(describing: $1.key) } }
    }
}

let dict = ["foo" : 1,"bar" : 1,"baz" : 2,"qux" : 2]

let keyvalueArray = dict.valueKeySorted

print(keyvalueArray)   // "[("baz",2),("qux",("bar",1),("foo",1)]"

for (key,value) in keyvalueArray {
    print(key,value)
}

Xcode 2.x

let keyvalueArray = dict.sort{ $0.0 < $1.0 }.sort{ $0.1 > $1.1}
print(keyvalueArray)  // [(.0 "baz",.1 2),(.0 "qux",(.0 "bar",.1 1),(.0 "foo",.1 1)]

您还可以创建字典值可比较的扩展名:

extension Dictionary where Value: Comparable {
    var valueKeySorted: [(Key,Value)] {
        return sort{ $0.1 > $1.1 }.sort{ String($0.0) < String($1.0) }
    }
    // or sorting as suggested by Just Another Coder without using map
    var valueKeySorted2: [(Key,Value)] {
        return sort{ if $0.1 != $1.1 { return $0.1 > $1.1 } else { return String($0.0) < String($1.0) } }
    }


}

用法

let dict = ["foo" : 1,1)]"

如果你想迭代keyvalueArray的元组

for (key,value)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐