【问题标题】:Sorting an array with instances of a custom class使用自定义类的实例对数组进行排序
【发布时间】:2010-07-24 18:49:09
【问题描述】:

我有一个数组,其中填充了一个自定义类的实例,该类包含两个字符串属性,名字和姓氏。两者都有一个 getter 方法,该方法等于属性本身的名称。还有一种检索人的全名的方法称为“getFullName”。考虑下面的例子。

 CustomClass *person = [[CustomClass alloc] ...];
 person.firstname  // Returns "Thomas"
 person.lastname // Returns "Meier"
 [person getFullName] // Returns "Thomas Meier"

现在我想按全名降序对这个数组进行排序。我一直在研究一些数组排序方法,但不太清楚如何去做。我想我必须创建某种比较两个元素的比较函数,但是我如何告诉 SDK 哪些值传递给这个方法以及我应该把它放在哪里(在自定义类中或在发生排序的类中?)。也许还有另一种/更好的方法来解决这个问题?诚然,我几乎没有排序数组的经验。

非常感谢您的帮助!

附言。代码应在 iOS 3.2 上运行

【问题讨论】:

标签: iphone objective-c arrays sorting


【解决方案1】:

有几种方法可以做到这一点。一种是在自定义类上放一个比较方法。称它为-compare: 或类似名称。该方法应将另一个具有相同自定义类型的对象作为其输入。它应该返回NSOrderedAscendingNSOrderedDescendingNSOrderedSame,具体取决于比较的结果。 (在此比较函数中,您可以查看自己的全名与传入对象的全名。)

然后你可以使用NSMutableArray-sortUsingSelector:方法,像这样:

[myArray sortUsingSelector:@selector(compare:)];

这适用于所有版本的 iOS。 4.0+有块比较方法。

【讨论】:

  • 不要问我为什么,但是当我阅读您的帖子时,我才意识到这个系统是如何工作的:) 太棒了,现在这些东西是有意义的。非常感谢!我认为作为对我的问题的评论发布的链接是创建单独的自定义方法的捷径,但您的帖子当然也可以。
猜你喜欢
  • 2014-04-19
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2019-05-26
  • 2021-01-20
  • 1970-01-01
相关资源
最近更新 更多