objective-c - 使用自定义类根据其他数组对 NSArray 进行排序

标签 objective-c sorting nsmutablearray nsarray

我迫切需要对数组进行排序:情况是这样的,

我需要根据另一个数组中的其他对象类重新排列/排序和替换数组。

ParentClass :NSObject{
  NSString *name;
  NSNumber *type;
}

这是父类,填充parentArray

parentArray = { parentA, parentB, parentC }

这是另一个对象类,它有 ParentClass *parent。

@class ParentClass;

EntryClass: NSObject{
 NSString *name;
 NSNumber *number;
 ParentClass *parent;
}



Now I have an array entryArray = { entryX, entryY, entryZ };

entryX.parent is one of the ParentClasses and all of them are in parentArray.

entryX.parent  == ParentC;
entryY.parent  == ParentA;
entryZ.parent  == ParentB;

我想根据 parentArray 中的顺序对这个 entryArray 进行排序。 所以如果 ParentArray 是:

{
 ParentA,
 ParentB,
 ParentC
}

然后我希望排序后的 entryArray 是

{
 entryY,
 entryZ,
 entryX
}

此外,如果缺少一个条目 Object,entryZ,则数组应该是

{
 entryY,
 @"0.0",
 entryX
}

如果尝试了多种方法但都没有真正奏效,我们将不胜感激。

谢谢

更新: 更清晰: 假设parentArray在这个序列中

{parentA, parentB}

,入口数组在

{entryX, entryY}

,我想重新排列 entryArray,如果

entryY.parent == parentA, and entryX.parent == parentB

,然后根据他们在 parentArray 中的位置,parentA 是第一个,我希望 entryY 在 entryX 之前。 结果 = {entryY, entryX}。

最佳答案

事实上,您有一个“使用选择器方法排序”(S.O. source):

- (NSComparisonResult)compareParents:(EntryClass*)otherObject {
    return [parentArray indexOfObject:self.parent] < [parentArray indexOfObject:otherEntry.parent];
}

NSArray *sortedArray;
sortedArray = [entryArray sortedArrayUsingSelector:@selector(compareParents:)];

这样做,在对entryArray进行排序时,使用compareParents作为比较方法。这意味着 e1 将“小于”e2 当且仅当 e1.parent 小于 e2.parent。这正是您想要的。

compareParents 应该定义 EntryClass 的广告方法并且 parentArray 应该对它可见。

原始答案:

我不确定我是否完全理解您正在尝试做的事情;无论如何,我会使用字典来解决这个问题,你可以在字典中将每个父项关联到它的条目。这样,一旦您对父数组进行了排序,您就可以迭代并找出相应的条目,该条目也将被(间接)排序。

关于objective-c - 使用自定义类根据其他数组对 NSArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242715/

相关文章:

objective-c - 如何在 NSMenuItem 中绘制内联样式标签(或按钮)

iphone - FMDB中的ResultSet列数

ios - iOS 7 中的导航栏裁剪背景图像;ClipsToBounds :NO not working

java - Android - 是否可以使用 Comparator.comparing 而不是 API < 24 上的自定义比较器对列表进行排序?

mongodb - 按嵌入文档排序

swift - 在 Swift 中有选择地从 NSMutableArray 中移除和删除对象

ios - 位置管理器不会更新 iPad 中的位置,但它可以在 iPhone 中使用

sorting - 如何在Kotlin中使用sortedWith()?

objective-c - NSLog 可以打印的最大尺寸

ios - 如何在 TextView 中的 NSMutableArray 中追加值?