我想用不同的描述符键对对象进行排序。)
问题:
我有两个数组,其中填充了不同类的对象。这两个类不共享一个公共属性用作排序描述符。
我想按字母顺序对数组进行排序,并只返回一个包含所有对象的数组。
FinalArray =>按字母顺序排列数组的所有对象(1,2)
答案 0 :(得分:3)
你可以这样做:
NSArray *result
result
数组,方法是将第一个数组的元素后跟第二个数组的元素复制到result
。sortedArrayUsingComparator:
与“理解”两种类型的比较器一起使用。这是一个骨架实现:
NSArray *sortedArray = [result sortedArrayUsingComparator: ^(id obj1, id obj2) {
NSString *key1, *key2;
if ([obj1 isKindOfClass:['class has a title' class]]) {
key1 = [obj1 title];
} else { // It's the kind of objects that has a name
key1 = [obj1 name];
}
if ([obj2 isKindOfClass:['class has a title' class]]) {
key2 = [obj2 title];
} else { // It's the kind of objects that has a name
key2 = [obj2 name];
}
// Do the comparison
return [key1 caseInsensitiveCompare:key2];
}];
答案 1 :(得分:0)
一种可能的解决方案:将所有数组对象添加到NSMutableDictionary
,其中键是" name"或"标题"在适当的时候,然后拉出所有字典键,对它们进行排序,并通过排序键将对象检索到一个新数组中:
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
for (a in array1) {
[dict setObject:a forKey:a.name]; // assumes name is property
}
for (b in array2) {
[dict setObject:b forKey:b.title]; // assumes title is property
}
NSArray* sortedKeys = [[dict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSArray* objects = [dict objectsForKeys:sortedKeys notFoundMarker:[NSNull null]];