如何按整数值对NSDictionary进行排序?

时间:2016-09-08 09:18:28

标签: ios swift xcode sorting nsdictionary

我有NSDictionary。当我打印它时,它看起来像这样:

{
    3gZ0qtk0yMUEvtSmz2RW40Y7AC83 = 12;
    USXhV0QYkpbSzAmXgfeteXHuoqg2 = 25;
    UTPFBV5Q5IgTh17060c6WxNDQCO2 = 1;
    fqsspZtskWVheqUQQtROepixsGB2 = 256;
}

我想对它进行排序,使它看起来像这样:

{
    fqsspZtskWVheqUQQtROepixsGB2 = 256;
    USXhV0QYkpbSzAmXgfeteXHuoqg2 = 25;
    3gZ0qtk0yMUEvtSmz2RW40Y7AC83 = 12;
    UTPFBV5Q5IgTh17060c6WxNDQCO2 = 1;
}

我看到的所有方法都需要一个关键名称,但我不明白。没有关键名称。对不起,如果这是重复但我从其他问题尝试的一切都不起作用。有太多的方法,我得到各种错误和其他问题所以我想知道以这种方式排序NSDictionaries的最佳(最新)和最有效的方法。

此外,它还来自firebase快照 例如:

self.friendsDict = snapshot.value as! NSDictionary

2 个答案:

答案 0 :(得分:1)

由于你说这个链接Swift sort dictionary by value的解决方案不起作用,我在我身边发布了一个工作代码:

let dict:NSDictionary = [
    "3gZ0qtk0yMUEvtSmz2RW40Y7AC83" : 12,
    "USXhV0QYkpbSzAmXgfeteXHuoqg2" : 25,
    "UTPFBV5Q5IgTh17060c6WxNDQCO2" : 1,
    "fqsspZtskWVheqUQQtROepixsGB2" : 256
]

let d = dict as! [String:NSInteger]

for (k,v) in (Array(d).sort {$0.1 > $1.1}) {
    print("\(k):\(v)")
}

<强>输出:

fqsspZtskWVheqUQQtROepixsGB2:256
USXhV0QYkpbSzAmXgfeteXHuoqg2:25
3gZ0qtk0yMUEvtSmz2RW40Y7AC83:12
UTPFBV5Q5IgTh17060c6WxNDQCO2:1

修改

要使上述代码起作用,OP必须改变:

self.friendsDict = snapshot.value as! NSDictionary

为:

self.friendsDict = snapshot.value as! [String:NSInteger]

答案 1 :(得分:1)

试试这个 -

while (--arrLen >= 0)
    printf("%d %d\n", arr[arrLen], arrLen);

OR

let dict:NSMutableDictionary = [
    "3gZ0qtk0yMUEvtSmz2RW40Y7AC83" : 12,
    "USXhV0QYkpbSzAmXgfeteXHuoqg2" : 25,
    "UTPFBV5Q5IgTh17060c6WxNDQCO2" : 1,
    "fqsspZtskWVheqUQQtROepixsGB2" : 256
]

let sortedKeys2 = (dict as NSDictionary).keysSortedByValueUsingComparator
    {
       ($1 as! NSNumber).compare($0 as! NSNumber)
}

let dict = [
"3gZ0qtk0yMUEvtSmz2RW40Y7AC83" : 12,
"USXhV0QYkpbSzAmXgfeteXHuoqg2" : 25,
"UTPFBV5Q5IgTh17060c6WxNDQCO2" : 1,
"fqsspZtskWVheqUQQtROepixsGB2" : 256