2012-09-18 100 views
0

這是我的情況:排序多個陣列

我操縱6個NSMutableArrays。其中一個有NSDate的對象,其他的有NSNumber s。當我填充它們時,我爲它們中的每一個使用了addObject:,因此每個數組的索引0包含date數組中索引爲0的所有我想要的值。

我想確保數組都按照日期數組排序(按日期排序,升序排列),這意味着在排序期間,如果日期數組的第5行移動到第1行,它必須也可以應用於所有其他陣列。

以前使用CoreData,但我必須不再使用它(請不要問爲什麼,這是題外話;))。在CoreData,我可以用一個NSSortDescriptor,但我對如何與多個NSArray做吧不知道......

與往常一樣,提示/答案/解決方案總是讚賞:)

+2

不能將包含日期的所有6個數據項打包到單個對象中,而不是將其保存在6個不同的數組中?然後你將有一個單一的數組。只需按日期屬性對該數組進行排序即可。 – Anurag

+0

是的,謝謝,這實際上是蘇丹和本建議的。我不敢相信我甚至沒有想到:) – rdurand

回答

4

這是一個共同的問題。使用以下方法。

  1. 將您的六個數組封裝到一個對象中 - 每個實例都有六個屬性。
  2. 執行compare:關於此對象的方法,使用[NSDate compare:](這一步可以跳過,但這種方法更清潔)。
  3. 現在你只有一個陣列 - 使用排序從第2步
+0

謝謝。正如我在我的問題中評論的,我不敢相信我沒有想到:) – rdurand

2

我認爲更好的解決方案讓您有NSDictionary中的對象的NSArray的方法吧。

NSArray *allValues = [[NSArray alloc] init]; 
NSDictionary *dict = @{"Date" : [NSDate date], @"Key1" : @"Value1", @"Key2" : @"Value2"}; 

然後你可以用sortDescriptor排序這個數組沒有任何問題。 然後,您也可以根據需要使用Comparator或Sort Desriptor。

+1

這實際上不是一個壞主意,使用字典。我曾經使用過很多次數組,使我從其他容器中失明。非常感謝! – rdurand

1

將您在數組中存儲的所有項目包裝到單個對象中。您之前的6個陣列中的每一個都是屬性。

內部的對象,你可以實現

- (NSComparisonResult)compare:(YourClass *)otherObject { 
    return [self.date compare:otherObject.date]; 
} 

您可以在陣列現在排序,他們會按日期排序。

+0

謝謝,我可能會用這樣的東西去。抱歉,但@Sulthan提前2分鐘發佈了類似的解決方案,所以我必須接受他的回答:) – rdurand