对包含数组的对象进行排序的Objective-C数组

3
哇...这是一个标题。我有一个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]; // 变量"myObjects"持有上面的数组表示
但是,我如何按每个人的第一个最喜欢的数字对数组进行排序呢?
期望的结果将按以下顺序对数组进行排序: Jill、Jack、Sally; 因为Jill的第一个最喜欢的数字是1,Jack的是7,而Sally的是68。
1个回答

2
您可以在此处使用NSSortDescriptorselector属性。如果这些对象是它们自己的子类,那么创建一个选择器,例如-compareFavoriteNumberToObject:,返回NSComparisonResult。如果这些对象只是像NSDictionary这样的东西,您可以在类上创建一个分类来执行比较。

1
那您的建议是,在我的“colors”类中,我应该创建一个选择器,例如-compareFavoriteNumberToObject:,它将比较两个返回NSComparisonResult的“colors”对象?如果是这样,我是否需要像这样对数组进行排序? [myObjects sortUsingSelector:@selector(compareFavoriteNumberToObject :)]; - Chad Hutchins
是的,那听起来很合适。严格来说,我会选择-compareFavoriteNumberWithColor:,因为你不能使用任何对象。 - Jeff Kelley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接