2012-02-11 65 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