排序包含包含数组的对象的Objective-c数组

排序包含包含数组的对象的Objective-c数组,objective-c,multidimensional-array,Objective C,Multidimensional Array,呼。。。多好的标题啊。因此,我有一个NSMutableArray,它被分配了从API调用检索的数据。我无法控制API调用响应的结构,我希望按照它提供的格式对数组进行排序。(当然欢迎其他解决方案) 这是一个愚蠢的示例(为了保持简单),但我想要排序的数组可以表示为如下所示: myObjects = array( 0 => object( name => @"Jack", favoriteNumbers => object( numbers => 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 ) ) ) ) MyObject= 排列( 0=>对象( name=>@“杰克”, favoriteNumbers=>object( 数字=>数组( 0 => 7, 1 => 11, 2 => 6 ) ) ), 1=>对象( name=>@“吉尔”, favoriteNumbers=>object( 数字=>数组( 0 => 1, 1 => 2, 2 => 3 ) ) ), 3=>对象( name=>@“Sally”, favoriteNumbers=>object( 数字=>数组( 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 NSSortDescriptor*sortDescriptor; sortDescriptor=[[NSSortDescriptor alloc]initWithKey:@“name”升序:否]自动释放]; NSArray*sortDescriptors=[NSArray数组带对象:sortDescriptor]; NSArray*sortByDurationArray=[MyObject SortDarray使用描述符:sortDescriptors]; //变量“myObjects”保存上面的数组表示形式 但是我如何按照每个人最喜欢的数字对数组进行排序呢


期望的结果将按以下顺序对数组进行排序:吉尔、杰克、萨利;因为吉尔最喜欢的数字是1,杰克的是7,莎莉的是68。

你可以在这里使用
NSSortDescriptor
选择器属性。如果这些对象是它们自己的子类,那么创建一个类似于
-compareFavoriteNumberObject:
的选择器,它返回一个
NSComparisonResult
。如果对象与NSDictionary类似,您可以在类上创建一个类别来进行比较。

那么您是否建议在我的“colors”类中创建一个选择器,例如-compareFavoriteNumberToObject:,它将比较返回NSComparisonResult的两个“colors”对象?如果是的话,我会这样对数组进行排序吗?[MyObject sortUsingSelector:@selector(CompareFavoriteNumbertObject:)];是的,听起来很合适。严格地说,我会选择
-compareFavoriteNumberWithColor:
,因为您不能只使用任何对象。