使用对象对NSMutableArray进行排序

时间:2013-12-12 17:20:38

标签: ios objective-c arrays

希望有人可以提供帮助。

我正在向NSMutableArray添加多个对象,我需要根据第一个元素对顺序进行排序。第一个元素始终是一个数字。

但是我不确定该怎么做?

例如:

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

由于

2 个答案:

答案 0 :(得分: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消息,那么你应该添加错误检查代码。

答案 1 :(得分:0)

如果按字母顺序对数组进行排序,则对象@"1"将出现在任何单词之前。请注意,上面代码中的@"1"是字符串,而不是数字。

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