我知道如何通过其键对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;
}];
答案 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
}
})