第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Swift中按值對字典排序

在Swift中按值對字典排序

紅顏莎娜 2019-10-18 10:25:47
是否有-(NSArray *)keysSortedByValueUsingSelector:(SEL)comparator的類似物?如何在不強制轉(zhuǎn)換為NSDictionary的情況下執(zhí)行此操作?我試過了,但這似乎不是一個好的解決方案。var values = Array(dict.values)values.sort({    $0 > $1    })for number in values {    for (key, value) in dict {        if value == number {            println(key + " : \(value)");            dict.removeValueForKey(key);            break        }    }}例:var dict = ["cola" : 10, "fanta" : 12, "sprite" : 8]dict.sortedKeysByValues(>) // fanta (12), cola(10), sprite(8)
查看完整描述

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


查看完整回答
反對 回復(fù) 2019-10-18
?
蕭十郎

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"]


查看完整回答
反對 回復(fù) 2019-10-18
  • 3 回答
  • 0 關(guān)注
  • 1797 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號