我有一个数组,其中包含一个自定义类的实例,其中包含两个 String 属性,firstname 和 lastname。两者都有一个 getter 方法,它等于属性本身的名称。还有一种用于检索名为“getFullName”的人的全名的方法。考虑下面的例子。

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

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

非常感谢你的帮助!

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

最佳答案

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

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

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

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

关于iphone - 使用自定义类的实例对数组进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3326403/

10-12 21:40