如何使用多个objectForKey将NSMutableArray排序为NSMutableDictionary

时间:2013-10-17 09:09:39

标签: ios objective-c nsmutablearray nsmutabledictionary

我有一个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进行排序,依此类推。我认为它被称为树种?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

您应该尝试使用NSPredicateNSSortDescriptor

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];
    }];