我有一个'通用对象'的NSArray,它包含以下属性
-name
-id
-type (question, topic or user)
如何根据通用对象的类型对这个泛型对象数组进行排序?例如。我想在顶部显示“主题”类型的所有通用对象,然后是“用户”而非“问题”
答案 0 :(得分:5)
您需要定义自定义排序函数,然后将其传递给允许自定义排序的NSArray方法。例如,使用sortedArrayUsingFunction:context:
,您可以编写(假设您的类型是NSString实例):
NSInteger customSort(id obj1, id obj2, void *context) {
NSString * type1 = [obj1 type];
NSString * type2 = [obj2 type];
NSArray * order = [NSArray arrayWithObjects:@"topic", @"users", @"questions", nil];
if([type1 isEqualToString:type2]) {
return NSOrderedSame; // same type
} else if([order indexOfObject:type1] < [order indexOfObject:type2]) {
return NSOrderedDescending; // the first type is preferred
} else {
return NSOrderedAscending; // the second type is preferred
}
}
// later...
NSArray * sortedArray = [myGenericArray sortedArrayUsingFunction:customSort
context:NULL];
如果您的类型不是NSStrings,那么只需根据需要调整函数 - 您可以将order
数组中的字符串替换为您的实际对象,或者(如果您的类型是枚举的一部分)直接替换比较并完全消除order
数组。