如何分配对象数组

时间:2014-02-08 18:56:46

标签: objective-c sorting nsarray nsdictionary nssortdescriptor

考虑一个名为NSObject的简单Object子类,它有两个属性:namegroup

我需要从NSArray生成ObjectsNSArray NSArrays,每个子数组包含按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}}

1 个答案:

答案 0 :(得分: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];