当值相同时如何对字典数组进行排序?

时间:2017-02-28 04:07:16

标签: objective-c arrays sorting dictionary

我知道如何通过其键对nsdictionary数组进行排序。但问题出现了,当密钥的值相同时,那么如何在它们之间进行排序呢?用另一个密钥说出来?

例如

[{
key1 = 2;
key2 = A;
},
{
key1 = 1;
key2 = D;
},
{
key1 = 1;
key2 = E;
},
{
key1 = 1;
key2 = C;
}]

当我按key1排序时,3个项目将位于顶部,key1 = 2个字典将位于底部。

我希望在按key1对整个数组进行排序后,按key2对3项进行排序。基本上我的目标是:

[{
key1 = 1;
key2 = C;
},
{
key1 = 1;
key2 = D;
},
{
key1 = 1;
key2 = E;
},
{
key1 = 2;
key2 = A;
}]

以下是我按key1排序的代码:

sortedArr = [dataDict keysSortedByValueUsingComparator:
                     ^NSComparisonResult(NSDictionary* obj1, NSDictionary* obj2)
                     {
                         NSComparisonResult result = NSOrderedSame;
                         if(obj1["key1"] != nil && obj2["key1"]!=nil)
                         {
                             return [obj2["key1"] compare:obj1["key1"]];
                         }
                         else
                             return result;
                     }];

2 个答案:

答案 0 :(得分:0)

请试试这个,

        NSArray *arrActual = .....;

        NSSortDescriptor * sortKey1 = [NSSortDescriptor sortDescriptorWithKey:@"key1" ascending:YES];
        NSSortDescriptor * sortKey2 = [NSSortDescriptor sortDescriptorWithKey:@"key2" ascending:YES];

        NSArray *arrSorted = [arrActual sortedArrayUsingDescriptors:@[sortDate, sortName]];

希望这会对你有所帮助:)。

答案 1 :(得分:0)

夫特

这真的是Swift派上用场的地方。我知道这不是你想要的答案,但这是swift数组的一个强大功能,如果你希望.swift超过.m,你可能要在即将开始的课程中考虑。

let sorted = allSongs.sorted(by: { (firstSong, secondSong) -> Bool in
    if let firstTitle = firstSong.title, let secondTitle = secondSong.title {
        return firstTitle < secondTitle
    }
    else {
        return false
    }
})