Объединение NSArrays в Objective-C
-
16-09-2019 - |
Вопрос
У меня есть NSDictionary, где каждый ключ указывает на массив.Позже я хочу объединить все значения в один массив.Есть ли способ использовать API, чтобы сделать что-то более эффективное, чем сказать:
NSArray *anArray = [someDictionary allValues];
NSMutableArray *newArray = [NSMutableArray array];
start outter loop on anArray
start inner loop on objects in anArray
add objectAtIndex to newArray
Решение
Просто используй [newArray addObjectsFromArray:anArray];
Другие советы
В приведенном выше ответе Бенна Готлиба есть некоторая путаница.Чтобы внести ясность, он предлагает использовать Добавить объекты из массива вместо внутреннего цикла, в то время как Coocoo сбит с толку, потому что он думает, что это предлагается в качестве замены ВСЕГО цикла.(Если вы сделаете это, вы действительно останетесь с неположенным массивом массивов в соответствии с его возражением.)
Вот достаточно элегантное решение, которое не требует какого-либо явного зацикливания:
NSArray *anArray = [someDictionary allValues];
NSArray *flattenedArray = [anArray valueForKeyPath: @"@unionOfArrays.self"];
кстати, этот код оставит дубликаты в сплющенном массиве.Если вы хотите удалить дубликаты, используйте Различение множеств вместо того , чтобы Объединение группировок.