2014-02-08 62 views
0

考慮一個簡單的NSObject子類Object,它有兩個屬性:namegroup如何劃分對象陣列

我需要從一個ObjectsNSArray產生的NSArrays一個NSArray,含有由name和所有具有相同group值排序對象每個子陣列。輸出數組必須按group排序。

什麼是一些簡潔而有效的方法來做到這一點?

實施例:

輸入:

@[ 
    @{ @"name" : @"E", @"group" : @"Y" }, 
    @{ @"name" : @"D", @"group" : @"Z" }, 
    @{ @"name" : @"B", @"group" : @"Y" }, 
    @{ @"name" : @"C", @"group" : @"X" }, 
    @{ @"name" : @"D", @"group" : @"Z" }, 
    @{ @"name" : @"A", @"group" : @"X" }, 
    @{ @"name" : @"F", @"group" : @"X" }, 
    @{ @"name" : @"G", @"group" : @"Y" }, 
}] 

輸出:

@[ 
    @[ 
     @{ @"name" : @"A", @"group" : @"X" }, 
     @{ @"name" : @"C", @"group" : @"X" }, 
     @{ @"name" : @"F", @"group" : @"X" }, 
    ], 
    @[ 
     @{ @"name" : @"B", @"group" : @"Y" }, 
     @{ @"name" : @"E", @"group" : @"Y" }, 
     @{ @"name" : @"G", @"group" : @"Y" }, 
    ], 
    @[ 
     @{ @"name" : @"D", @"group" : @"Z" }, 
    ], 
] 
+1

請問陣列工作的字典? – nhgrif

回答

0

如果陣列的字典將工作...

NSMutableDictionary *groupedDictionary = [NSMutableDictionary dictionary]; 

for (Object *anObject in originalArray) { 
    NSMutableArray *groupArray = [groupedDictionary objectForKey:anObject.group]; 

    if(groupArray) { 
     [groupArray addObject:anObject]; 
    } else { 
     groupArray = [NSMutableArray arrayWithObject:anObject]; 
     [groupedDictionary addObject:groupArray forKey:anObject.group]; 
    } 
} 

結果是字典的陣列。關鍵是組,該值是該組中的對象數組。

如果您仍然需要它作爲一個數組,你其實可以再打開這本字典到一個數組做這個:

NSArray *groupedArrays = [groupedDictionary allValues];