2010-07-06 3 views
2

Как объединить несколько NSArrays в один массив с переменными значениями? Например.Объединение нескольких NSArrays

Массив Один: оранжевый, яблоко, груша

Массив Два: Дерево, Кустарник, Цветок

Массив Три: синий, зеленый, желтый

Окончательный массив должен был бы быть: Orange , дерево, синий, Apple, Кустарник, зеленый и т.д.

ответ

3

Предполагая, что массивы являются все той же длины:

NSUInteger numberOfArrays = 3; 
NSUInteger arrayLength = [arrayOne length]; 
NSMutableArray *finalMutableArray = [NSMutableArray arrayWithCapacity:(arrayLength * numberOfArrays)]; 
for (NSUInteger index = 0; index < arrayLength; index++) { 
    [finalMutableArray addObject:[arrayOne objectAtIndex:index]]; 
    [finalMutableArray addObject:[arrayTwo objectAtIndex:index]]; 
    [finalMutableArray addObject:[arrayThree objectAtIndex:index]]; 
} 
NSArray *finalArray = [NSArray arrayWithArray:finalMutableArray]; 

Возможно, вам захочется проверить, что массивы имеют одинаковую длину. Вы не можете добавить nil в NSMutableArray или NSArray. Вы можете добавить заполнитель NSNull, но, вероятно, лучше проверить свой ввод.

+0

Я добавил исправление в значение емкости. –

3

Если у вас есть массив массивов

NSArray *arrayOfArrays = ...; 
NSMutableArray *oneArray = [NSMutableArray array]; 
for (NSArray *tmpArray in arrayOfArrays) { 
    [oneArray addObjectsFromArray:tmpArray]; 
} 
6

[@[@[@1,@2],@[@3,@4],@[@5,@6]] valueForKeyPath:@"@unionOfArrays.self"]

Поэтому, как только у вас есть массив массивов вы называете unionOfArrays оператора сбора.

+0

+1 для умного использования кодирования с ключом. Вы должны убедиться, что ни одна из ваших составных частей не равна нулю, если вы идете по этому маршруту. –

Смежные вопросы