我迫切需要对数组进行排序:情况是这样的,
我需要根据另一个数组中的其他对象类重新排列/排序和替换数组。
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/