如何在NSMutableArray里面订购NSMutableArray

时间:2011-08-22 09:55:40

标签: iphone ios ipad nsmutablearray nsarray

我需要在内部对数组进行排序,如下所示:

 NSMutableArray * array_example = [[NSMutableArray alloc] init];

 [array_example addObject:[NSMutableArray arrayWithObjects:
                            string_1,
                            string_2,
                            string_3,
                            nil]
 ];

如何通过数组的字段“string_1”来订购此数组??? 我怎么能这样做?

由于

2 个答案:

答案 0 :(得分:2)

对于iOS 4及更高版本,可以使用comparator块轻松完成:

[array_example sortUsingComparator:^(NSArray *o1, NSArray *o2) {
    return (NSComparisonResult)[[o1 objectAtIndex:0] compare:[o2 objectAtIndex:0]];
}];

如果您对块的工作方式感兴趣,可以查看Apple的Short Practical Guide to Blocks

如果您希望支持iOS 3.x,则必须使用自定义比较功能:

NSComparisonResult compareArrayFirstElement(NSArray *o1, NSArray *o2) {
    return [[o1 objectAtIndex:0] compare:[o2 objectAtIndex:0]];
}

然后使用:

[array_example sortUsingFunction:compareArrayFirstElement context:nil];

答案 1 :(得分:1)

您可以循环数组对象并在每个子数组上调用sortedArrayUsingSelector,然后使用ObjectAtIndex:withObject将其注入原始数组

    NSMutableArray * array_example = [[NSMutableArray alloc] init];

    [array_example addObject:[NSMutableArray arrayWithObjects:
                            @"z",
                            @"a",
                            @"ddd",
                            nil]
    ];
    [array_example addObject:[NSMutableArray arrayWithObjects:
                            @"g",
                            @"a",
                            @"p",
                            nil]
    ];
    NSLog(@"Original Array: %@", array_example);

    for(int i = 0; i < [array_example  count] ; i++){
        [array_example replaceObjectAtIndex:i withObject:[[array_example objectAtIndex:i] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]];
        // order sub array
    }
    NSLog(@"Sorted Array: %@", array_example);