Объединение нескольких NSArrays - PullRequest
2 голосов
/ 07 июля 2010

Как я могу объединить несколько NSArrays в один массив с чередующимися значениями? Например.

Массив один: апельсин, яблоко, груша

Массив два: дерево, куст, цветок

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

Конечный массив должен быть: Апельсин, дерево, синий, яблоко, кустарник, зеленый, и т. Д.

Ответы [ 3 ]

8 голосов
/ 13 февраля 2015

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

Итак, когда у вас есть массив массивов, вы вызываете unionOfArrays оператор сбора.

3 голосов
/ 06 января 2012

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

NSArray *arrayOfArrays = ...;
NSMutableArray *oneArray = [NSMutableArray array];
for (NSArray *tmpArray in arrayOfArrays) {
    [oneArray addObjectsFromArray:tmpArray];
}
3 голосов
/ 07 июля 2010

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

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, но, возможно, лучше проверить ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...