【问题标题】:How to order NSMutableArray with NSMutableArray inside如何订购带有 NSMutableArray 的 NSMutableArray
【发布时间】:2011-08-22 09:55:40
【问题描述】:

我需要对一个包含数组的数组进行排序,如下所示:

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

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

如何按数组的“string_1”字段排序这个数组??? 知道我该怎么做吗?

谢谢

【问题讨论】:

  • 注意array_example 缺少的指针,以及arrayWithObjects 声明中多余的逗号,请参考下面我的回答。祝你好运

标签: iphone ios ipad nsmutablearray nsarray


【解决方案1】:

对于 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];

【讨论】:

  • 对于您的第一个示例,我需要为 array_example 的每个项目执行该块,例如: for(int i=0; i
  • 不,您只需要使用编写的代码即可。如果您想更多地了解块,我已经添加了指向 Apple 文档的链接。 NSMutableArray 参考文档也可以为您提供帮助。
  • 改用[[o2 objectAtIndex:0] compare:[o1 objectAtIndex:0]]
【解决方案2】:

您可以循环数组对象并在每个子数组上调用 sortedArrayUsingSelector,然后将 replaceObjectAtIndex: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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多