我有一个数组,其中包含一个自定义类的实例,其中包含两个 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:
或类似的东西。该方法应该将另一个具有相同自定义类型的对象作为其输入。它应该返回 NSOrderedAscending
、 NSOrderedDescending
或 NSOrderedSame
,具体取决于比较的结果。 (在此比较函数中,您可以查看自己的 fullName 与传入对象的 fullName。)
然后你可以使用 NSMutableArray
的 -sortUsingSelector:
方法,像这样:
[myArray sortUsingSelector:@selector(compare:)];
这适用于所有版本的 iOS。 4.0+ 中提供了块比较方法。
关于iphone - 使用自定义类的实例对数组进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3326403/