2010-12-07 141 views
3

Whew ...什么是标题。所以我有一个NSMutableArray被分配了从API调用中获取的数据。我无法控制API调用响应的结构,我想按照提供的格式对数组进行排序。 (其它解决方案的欢迎,当然)Sort Objective-c数组,其中包含包含数组的对象

这是一个愚蠢的例子(让事情变得简单),但我想排序的阵列可以表示这样的事情:

 
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.

回答

2

您可以使用NSSortDescriptorselector属性在这里。如果这些对象是它们自己的子类,那么创建一个选择器,如-compareFavoriteNumberToObject:,它返回NSComparisonResult。如果对象只是一个NSDictionary,您可以在课程上做一个类别来进行比较。

+1

那么你是否暗示在我的“颜色”类中我应该创建一个选择器,例如-compareFavoriteNumberToObject :,它将比较返回NSComparisonResult的两个“颜色”对象?如果是这样,我会做这样的排序数组? [myObjects sortUsingSelector:@selector(compareFavoriteNumberToObject :)]; – 2010-12-07 22:58:06

相关问题