0

Рассмотрим простой подкласс NSObject под названием Object с двумя свойствами: name и group.Как подобрать массив объектов

мне нужно произвести из NSArray из Objects, NSArray из 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

Будет ли словарь массивов работы? – 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]; 
Смежные вопросы