【问题标题】:Sort numbers inside an array of custom objects对自定义对象数组中的数字进行排序
【发布时间】:2017-03-09 13:23:57
【问题描述】:

我试过thisthisthis链接

我有一个数组(比如 personObjectArray),其中包含 Person 类的对象。

Person 有 2 个变量说, NSString *name, NSString *age.

这里 age 的类型为 nsstring。

现在当我像下面这样排序时,

personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){

    return [p1.age compare:p2.age];

}] mutableCopy];

是这样的,

1, 11, 123 2、 23, 3... 它排序像字母顺序不考虑它作为一个数字。

所以我像这样更改我的代码,

personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){

    return [[p1.age intValue] compare:[p2.age intValue] ];

}] mutableCopy];

它说,Bad receiver type 'int'

我现在如何排序? 请不要告诉我在 Person 类中更改 age 的数据类型。我无法改变它。任何帮助表示赞赏(:,感谢您的时间。

【问题讨论】:

  • 你试过比较方法而不是使用块吗?
  • 那是什么,你能告诉我清楚吗?
  • 将其映射为 Int 类型,对其进行排序,然后再次将其映射为 NSString 类型
  • return [p1.age compare:p2.age options:NSNumericSearch];return [@([p1.age intValue]) compare:@([p2.age intValue]) ];
  • 您在原始 (int) 上使用了 compare:,这是您不能做的事情,这就是您收到错误的原因。您必须使用具有compare: 方法的NSNumber,而@() 是它的简短语法。否则,您需要执行 [[NSNumber numberWithInt:[p1.age intValue]] compare:[NSNumber numberWithInt:[p2.age intValue]]] 相同的操作。

标签: ios objective-c sorting


【解决方案1】:

您在原始(非对象)类型 int 上使用比较,因此它不起作用。

试试这个

 return [@([p1.age intValue]) compare:@([p2.age intValue])];

这里,我们使用 NSNumber(这是一个对象类型)来比较 int 值

@() 是一个 NSNumber 的字面量

希望这会对你有所帮助.. (:

【讨论】:

    【解决方案2】:

    试试这个:

    personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){
        return [p1.age compare:p2.age options:NSNumericSearch];
    }] mutableCopy];
    

    【讨论】:

      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多