【问题标题】:Sort Objective-c Array that contains Objects which contain Arrays对包含对象的Objective-c数组进行排序,该对象包含数组
【发布时间】:2010-12-07 22:27:50
【问题描述】:

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

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

我的对象 = 大批( 0 => 对象( 姓名 => @“杰克”, 最喜欢的数字 => 对象( 数字 => 数组( 0 => 7, 1 => 11, 2 => 6 ) ) ), 1 => 对象( 名称 => @“吉尔”, 最喜欢的数字 => 对象( 数字 => 数组( 0 => 1, 1 => 2, 2 => 3 ) ) ), 3 => 对象( 名称 => @“莎莉”, 最喜欢的数字 => 对象( 数字 => 数组( 0 => 68, 1 => 103, 2 => 99 ) ) ) )

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

NSSortDescriptor *sortDescriptor; sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" 升序:NO] autorelease]; NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; NSArray *sortByDurationArray = [myObjects sortedArrayUsingDescriptors:sortDescriptors]; // 变量“myObjects”保存上面的数组表示

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

所需的结果将按以下顺序对数组进行排序:Jill、Jack、Sally;因为 Jill 最喜欢的号码是 1,Jack 的号码是 7,而 Sally 的号码是 68。

【问题讨论】:

    标签: objective-c multidimensional-array


    【解决方案1】:

    您可以在此处使用NSSortDescriptorselector 属性。如果这些对象是它们自己的子类,则创建一个选择器——类似于-compareFavoriteNumberToObject:,它返回一个NSComparisonResult。如果对象只是 NSDictionary 之类的东西,您可以在类上创建一个类别来进行比较。

    【讨论】:

    • 那么您是否建议在我的“颜色”类中创建一个选择器,例如 -compareFavoriteNumberToObject:,它将比较两个返回 NSComparisonResult 的“颜色”对象?如果是这样,我会做这样的事情来对数组进行排序吗? [myObjects sortUsingSelector:@selector(compareFavoriteNumberToObject:)];
    • 是的,这听起来很合适。严格来说,我会选择-compareFavoriteNumberWithColor:,因为你不能只使用任何对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2020-09-04
    • 2015-07-02
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多