1

我想用不同的描述符键对对象进行排序)。

问题:

我有两个数组,其中填充了不同类的对象。并且这两个类不共享一个用作排序描述符的公共属性。

我想按字母顺序对数组进行排序,并且只返回一个包含所有对象的数组。

  • Array1 = 带有对象 [A 类]
    • 按“名称”排序
  • Array2 = 带有对象 [B 类]
    • 按“标题”排序

FinalArray => 排序(再次)按字母顺序排列所有对象的数组(1,2)

4

2 回答 2

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];
}];
于 2013-09-16T16:44:54.310 回答
0

一种可能的解决方案:将所有数组对象添加到 中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]];
于 2013-09-16T16:43:19.323 回答