我有一个NSmutableArray,里面有几十个NSMutableDictionaries。
每个NSMutableDictionary看起来都像这样
insComp = F;
insFlow = "suVE";
inID = "SJF42B";
ID = 10000038;
然后我想知道如何通过几个NSDictionary键对acending值进行排序。对于每个对象实例。
insComp> inID> ID
例如,不使用相同的键或值
-- obj1
var1 = A
var2 = A
-- obj2
var1 = A
var2 = B
-- obj3
var1 = B
var2 = A
-- obj4
var1 = C
var2 = A
因此,首先按var1排序,然后对每个var1-var2进行排序,依此类推。我认为它被称为树种?
任何帮助将不胜感激。
答案 0 :(得分:4)
您应该尝试使用NSPredicate
和NSSortDescriptor
类
NSArray *sortedArray = [yourArray sortedArrayUsingDescriptors:
@[[NSSortDescriptor
sortDescriptorWithKey:@"insComp" ascending:YES],
[NSSortDescriptor
sortDescriptorWithKey:@"Id" ascending:YES]]];
有一个很好的教程,专门用于对目标c here中的数据收集类进行排序和过滤以及所有这类操作。
答案 1 :(得分:2)
试试这个
NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey@"insComp" ascending:NO], [NSSortDescriptor sortDescriptorWithKey@"inID" ascending:NO],[NSSortDescriptor sortDescriptorWithKey@"ID" ascending:NO], nil]];
其中unsortedArray是你的NSMutableArray。
答案 2 :(得分:0)
你可以试试这个......
NSArray *firstSort = nil;
firstSort = [beforeSort sortedArrayUsingComparator:^NSComparisonResult(id firstObj, id secondObj) {
NSString *first = nil, *second = nil;
first = [((NSDictionary*)firstObj) objectForKey:@"Var1"];
second = [((NSDictionary*)secondObj) objectForKey:@"Var1"];
return [first compare:second];
}];
NSArray *secondSort = [firstSort sortedArrayUsingComparator:^NSComparisonResult(id firstObj, id secondObj) {
NSString *first = nil, *second = nil;
first = [((NSDictionary*)firstObj) objectForKey:@"Var2"];
second = [((NSDictionary*)secondObj) objectForKey:@"Var2"];
return [first compare:second];
}];