1

我有一个 NSmutableArray,里面有几十个 NSMutableDictionaries。

每个 NSMutableDictionary 看起来像这样

insComp = F;
insFlow = "suVE";
inID = "SJF42B";
ID = 10000038;

然后我想知道如何通过几个 NSDictionary 键对升序值进行排序。对于每个对象实例。

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

任何帮助将不胜感激。

4

3 回答 3

4

你应该尝试NSPredicateNSSortDescriptor课程一起去

NSArray *sortedArray = [yourArray sortedArrayUsingDescriptors:
                           @[[NSSortDescriptor 
                             sortDescriptorWithKey:@"insComp" ascending:YES], 
                             [NSSortDescriptor
                             sortDescriptorWithKey:@"Id" ascending:YES]]];

这里有一个很好的教程,专门用于对目标 c 中的数据收集类进行排序和过滤以及所有此类操作。

于 2013-10-17T09:20:55.843 回答
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。

于 2013-10-17T09:24:07.943 回答
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];
    }];
于 2013-10-17T09:26:51.777 回答