对Objective-c Array进行排序,其中包含包含Arrays的对象

时间:2010-12-07 22:27:50

标签: objective-c multidimensional-array

哇...什么标题。所以我有一个NSMutableArray,它被分配从API调用中检索的数据。我无法控制API调用响应的结构,我想用它提供的格式对数组进行排序。 (当然欢迎其他解决方案)

这是一个愚蠢的例子(为了简单起见),但我想要排序的数组可以表示如下:

myObjects = 
array(
  0 => object(
    name => @"Jack",
    favoriteNumbers => object(
      numbers => array(
        0 => 7,
        1 => 11,
        2 => 6
      )
    )
  ),
  1 => object(
    name => @"Jill",
    favoriteNumbers => object(
      numbers => array(
        0 => 1,
        1 => 2,
        2 => 3
      )
    )
  ),
  3 => object(
    name => @"Sally",
    favoriteNumbers => object(
      numbers => array(
        0 => 68,
        1 => 103,
        2 => 99
      )
    )
  )
)

我知道我可以简单地按名称排序:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortByDurationArray = [myObjects sortedArrayUsingDescriptors:sortDescriptors]; 
// the variable "myObjects" holds the array representation from above

但是我如何按每个人最喜欢的数字对数组进行排序?

所需的结果将按以下顺序对数组进行排序:Jill,Jack,Sally;因为吉尔的第一个最喜欢的数字是1,杰克是7,莎莉是68。

1 个答案:

答案 0 :(得分:2)

您可以在此处使用NSSortDescriptor的{​​{1}}媒体资源。如果这些对象是它们自己的子类,那么创建一个类似于selector的选择器,返回-compareFavoriteNumberToObject:。如果对象只是NSComparisonResult之类的对象,您可以在类上创建一个类别来进行比较。