2013-12-12 43 views
0

希望有人可以提供帮助。用对象对NSMutableArray进行排序

我添加了多个对象到一个NSMutableArray,我需要根据第一个元素来排序,这个元素总是一个数字。

但是我不确定如何做到这一点?

例如:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSArray *object = [NSArray arrayWithObjects: @"1",@"Test",@"Test"]; 
[array addObject:object]; 

感谢

+1

你可以展示你到目前为止已经尝试过什么,哪些不起作用? –

+0

你是否总是在你的mutableArray中添加数组? – shinyuX

+2

顺便说一句 - 第一个值不是数字,它是一个字符串。 – rmaddy

回答

1

如果阵列始终包含其他数组,而最里面的数组的第一个元素总是包含数字的字符串,你可以使用的NSMutableArray方法sortUsingComparator排序的数组:

[array sortUsingComparator: ^(NSArray* obj1, NSArray* obj2) 
{ 
    int value1 = [obj1[0] integerValue]; 
    int value2 = [obj2[0] integerValue]; 
    if (value1==value2) 
    return NSOrderedSame; 
    else if (value1 < value2) 
    return NSOrderedAscending; 
    else 
    return NSOrderedDescending; 
} 
]; 

在sortUsingComparator您提供了一组代码,sort方法用它来比较数组中的对象对。该块使用标准的typedef NSComparator,它将2个对象作为参数并返回一个NSComparisonResult类型的值。

如果数组中的所有对象都不是字符串数组,则上面的代码可能会崩溃。 (实际上,如果每个组件阵列的第一个元素是NSNumber,那么它会起作用,因为NSNumber也响应integerValue消息。)

如果您要在非常受控制的环境中使用此代码,您可以确保您正在排序的数据是格式良好的,它应该按照书面形式工作。如果数组中的对象有可能是不同的类型或空的,或者它们的第一个元素不会响应integerValue消息,那么您应该添加错误检查代码。

+0

非常感谢。 – Strikeforce

0

如果按字母数字排序的数组,对象@"1"将之前的任何字样出现。请记住,上面代码中的@"1"是一个字符串,而不是数字。

至于如何排序数组,请查看[NSArray sortedArrayUsingComparator:]和类似的方法。

相关问题