Как создать этот массив? - PullRequest
0 голосов
/ 28 июня 2011

Мне нужно создать массив с именем BigArray. BigArray должен содержать слова из массивов снизу.

Есть три массива, которые называются «пользователи». В каждом таком массиве есть определенные слова, такие как:

Пользователи1: Кошка, Собака, Летучая мышь

Пользователи2: яблоко, манго, банан, груша

Пользователи3: Большой, Маленький

Я хочу расположить вышеупомянутые слова в BigArray следующим образом: Кот, Яблоко, Большой, Собака, Манго, Маленький, Летучая мышь, Банан, Груша

Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 28 июня 2011

Это решение будет работать, даже если все ваши массивы Userx не имеют одинакового размера :

NSMutableArray BigArray = [[NSMutableArray alloc] init];
NSMutableArray u1 = [Users1 mutableCopy];
NSMutableArray u2 = [Users2 mutableCopy];
NSMutableArray u3 = [Users3 mutableCopy];
while ([u1 count] || [u2 count] || [u3 count]) {
    if ([u1 count]) {
        [BigArray addObject:[u1 objectAtIndex:0]];
        [u1 removeObjectAtIndex:0];
    }
    if ([u2 count]) {
        [BigArray addObject:[u2 objectAtIndex:0]];
        [u2 removeObjectAtIndex:0];
    }
    if ([u3 count]) {
        [BigArray addObject:[u3 objectAtIndex:0]];
        [u3 removeObjectAtIndex:0];
    }
}
[u1 release];
[u2 release];
[u3 release];
/* BigArray now contains what you need */
1 голос
/ 28 июня 2011

Посмотрите, поможет ли это

NSArray *a1 = [[NSArray alloc] initWithObjects:@"Cat", @"Dog", @"Bat",nil];
NSArray *a2 = [[NSArray alloc] initWithObjects:@"Apple", @"Mango", @"Banana", @"Pear",nil];
NSArray *a3 = [[NSArray alloc] initWithObjects:@"Big", @"Small",nil];
NSUInteger arrayLength = [a1 count]+[a2 count]+[a3 count]; 
NSMutableArray *finalMutableArray = [NSMutableArray arrayWithCapacity:(arrayLength)];
for (NSUInteger index = 0; index < [a2 count]; index++) { // take the size of the biggest array
if(index < [a1 count])
    [finalMutableArray addObject:[a1 objectAtIndex:index]];
[finalMutableArray addObject:[a2 objectAtIndex:index]];
if(index < [a3 count])
    [finalMutableArray addObject:[a3 objectAtIndex:index]];
}
NSArray *finalArray = [NSArray arrayWithArray:finalMutableArray];
[a1 release];
[a2 release];
[a3 release];
1 голос
/ 28 июня 2011
  1. Создать массив NSMutable FinalArray
  2. Пройдите через каждый из ваших меньших массивов
  3. Добавьте каждый объект из каждого меньшего массива с индексами от 0 до n в FinalArray в том же цикле.
0 голосов
/ 28 июня 2011

Первое, что приходит на ум, - это слегка сложный цикл (возможно, есть более элегантный способ, не знаю).

BOOL done = FALSE;
NSArray *arrays = [NSArray arrayWithObjects:users1, users2, users3, nil];
NSArray *array;
NSMutableArray *bigArray = [NSMutableArray arrayWithCapacity:users1.count+users2.count+users3.count];
int i = 0;
int j;
while (! done) {
    done = TRUE;
    for (j = 0; j < arrays.count; j++) {
         array = [arrays objectAtIndex:j];
         if (i < array.count) {
             [bigArray addObject:[array objectAtIndex:i]];
             done = FALSE;
         }
    }

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