我在这里看到很多关于排序NSArray
的问题,特别是那些充满自定义对象的问题,但它似乎总是归结为人们正在排序的特定属性或值。按名称排序,按年龄排序,按日期排序等。
但是可以使用对象的属性通过公式对NSArray
进行排序,而不仅仅是单个属性吗?例如,如果我有自定义类...
@interface SYSprocket : NSObject
@property int numberOfDoodads;
@property int widthOfWidgets;
和输入变量(int)extraNumber
,是否可以按公式NSArray
对SYSprocket
(numberOfDoodads / widthOfWidgets) + extraNumber
进行排序?
我的数组不是那么大,所以我可以根据需要迭代它们,但这似乎是不可能的事情,对吧?或者我错了吗?
答案 0 :(得分:2)
如果要使用自定义逻辑进行排序,可以在- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
上使用NSArray
方法,该方法采用带排序逻辑的块并返回已排序的数组。
sortedArray = [arrayWithObjects sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// cast obj1, obj2 to appropriate classes
// use if/else to do the comparision
// return NSOrderedSame / NSOrderedAscending / NSOrderedDescending
}];