我想用不同的描述符键对对象进行排序)。
问题:
我有两个数组,其中填充了不同类的对象。并且这两个类不共享一个用作排序描述符的公共属性。
我想按字母顺序对数组进行排序,并且只返回一个包含所有对象的数组。
- Array1 = 带有对象 [A 类]
- 按“名称”排序
- Array2 = 带有对象 [B 类]
- 按“标题”排序
FinalArray => 排序(再次)按字母顺序排列所有对象的数组(1,2)
我想用不同的描述符键对对象进行排序)。
问题:
我有两个数组,其中填充了不同类的对象。并且这两个类不共享一个用作排序描述符的公共属性。
我想按字母顺序对数组进行排序,并且只返回一个包含所有对象的数组。
FinalArray => 排序(再次)按字母顺序排列所有对象的数组(1,2)
你可以这样做:
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];
}];
一种可能的解决方案:将所有数组对象添加到 中NSMutableDictionary
,其中键是“name”或“title”,然后拉取所有字典键,对它们进行排序,并通过排序键将对象检索到一个新数组中:
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]];