我想迭代字典的键,首先按值(降序)排序,然后按键(升序)排序
let dict = ["foo" : 1, "bar" : 1, "baz" : 2, "qux" : 2]
迭代的顺序应该是:
["baz", "qux", "bar", "foo"]
我想打印:
baz 2
qux 2
bar 1
foo 1
Run Code Online (Sandbox Code Playgroud)
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", 2), ("bar", 1), ("foo", 1)]"
for (key, value) in keyValueArray {
print(key, value)
}
Run Code Online (Sandbox Code Playgroud)
Xcode 2.x
let keyValueArray = dict.sort{ $0.0 < $1.0 }.sort{ $0.1 > $1.1}
print(keyValueArray) // [(.0 "baz", .1 2), (.0 "qux", .1 2), (.0 "bar", .1 1), (.0 "foo", .1 1)]
Run Code Online (Sandbox Code Playgroud)
您还可以创建字典值可比较的扩展名:
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) } }
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
let dict = ["foo" : 1, "bar" : 1, "baz" : 2, "qux" : 2]
let keyValueArray = dict.valueKeySorted
print(keyValueArray) // "[("baz", 2), ("qux", 2), ("bar", 1), ("foo", 1)]"
Run Code Online (Sandbox Code Playgroud)
如果你想迭代keyValueArray的元组
for (key, value) in keyValueArray {
print(key, value)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |