2014-02-08 64 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];