2012-02-11 66 views
2

我迫切需要进行排序的数组:继承人的情况,排序NSArray的基于其它阵列使用自定义类

我需要重新排列/排序和替换基于从另一个阵列以外的对象类的阵列。

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

这是父类,其填充所述parentArray

parentArray = { parentA, parentB, parentC } 

这是另一个对象类,它具有父类*母体。

@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中的顺序对此入口数组进行排序。 所以如果ParentArray是:

{ 
ParentA, 
ParentB, 
ParentC 
} 

那么我想排序entryArray是

{ 
entryY, 
entryZ, 
entryX 
} 

而且,如果那里有一个条目对象丢失,entryZ,则数组应该是

{ 
entryY, 
@"0.0", 
entryX 
} 

如果尝试了很多方法,但没有一个真的有效,任何帮助表示赞赏。

感谢

UPDATE: 更加清晰: 假设parentArray是在这个序列

{parentA,parentB}

,和入口阵列在

{entryX,entryY}

,我想重新entryArray如果

entryY.parent == parentA和entryX.parent == parentB

,然后根据他们在parentArray,parentA志愿服务岗位作为第一个,我希望入境Y在入境X之前。 result = {entryY, entryX}.

回答

6

事实上你有一个 “之类的使用选择方法”(S.O. source):

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

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

否则这样,排序entryArraycompareParents用作比较方法时。这意味着如果e1.parent小于e2.parent,则e1将“小于”e2。这正是你想要的。

compareParents应该定义广告方法EntryClassparentArray应该对它可见。

原来的答案:

我不知道我完全明白你正在尝试做的;无论如何,我会用一本字典来处理这个问题,在这个字典中你将每个父母关联到它的条目。这样,一旦你有你的父数组排序,你可以迭代并找出哪些是相应的条目,这也将(间接)排序。

+0

简单地说,我想根据parentArray中父对象的顺序对entryArray进行排序。使用字典似乎是最后的手段,我想知道是否可以有一种sortUsing选择器有点方式.. – jasonIM 2012-02-11 18:30:51

+0

你是对的。请看我的编辑。 – sergio 2012-02-11 18:34:49

+0

嘿谢谢你的回复,但是,我该如何使用parentArray?由于这种排序不会发生在父类中,它发生在视图控制器中,并且entryArray的顺序将取决于ParentARRAY中父对象的顺序...真的非常感谢您的帮助! – jasonIM 2012-02-11 18:43:22