3 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
嘗試:
let dict = ["a":1, "c":3, "b":2]
extension Dictionary {
func sortedKeys(isOrderedBefore:(Key,Key) -> Bool) -> [Key] {
return Array(self.keys).sort(isOrderedBefore)
}
// Slower because of a lot of lookups, but probably takes less memory (this is equivalent to Pascals answer in an generic extension)
func sortedKeysByValue(isOrderedBefore:(Value, Value) -> Bool) -> [Key] {
return sortedKeys {
isOrderedBefore(self[$0]!, self[$1]!)
}
}
// Faster because of no lookups, may take more memory because of duplicating contents
func keysSortedByValue(isOrderedBefore:(Value, Value) -> Bool) -> [Key] {
return Array(self)
.sort() {
let (_, lv) = $0
let (_, rv) = $1
return isOrderedBefore(lv, rv)
}
.map {
let (k, _) = $0
return k
}
}
}
dict.keysSortedByValue(<)
dict.keysSortedByValue(>)
更新:
從beta 3更新到新的數(shù)組語法和排序語義。請注意,我正在使用,sort而不是sorted在最大程度上減少數(shù)組復(fù)制。該代碼可以做得更緊湊,通過查看早期版本,并取代sort與sorted和固定的KeyType[]是[KeyType]
更新到Swift 2.2:
更改類型從KeyType到Key和ValueType到Value。使用新的sort內(nèi)置函數(shù)Array代替sort(Array) Note可以通過使用sortInPlace代替來稍微改善所有這些的性能。sort

TA貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊
您可能會使用如下所示的內(nèi)容:
var dict = ["cola" : 10, "fanta" : 12, "sprite" : 8]
var myArr = Array(dict.keys)
var sortedKeys = sort(myArr) {
var obj1 = dict[$0] // get ob associated w/ key 1
var obj2 = dict[$1] // get ob associated w/ key 2
return obj1 > obj2
}
myArr // ["fanta", "cola", "sprite"]
- 3 回答
- 0 關(guān)注
- 1797 瀏覽
添加回答
舉報