2013-06-13 2 views
18

У меня есть массив как это:Свести к NSArray

array: (
    (
     "http://aaa/product/8_1371121323.png", 
     "http://aaa/product/14_1371123271.png" 
    ), 
    (
     "http://aaa/product/9_1371121377.png" 
    ) 
) 

и я должен создать еще один массив от того, как этого

array: (
    "http://aaa/product/8_1371121323.png", 
    "http://aaa/product/14_1371123271.png", 
    "http://aaa/product/9_1371121377.png" 
) 

Как я могу это сделать? Можно ли объединить все объекты и разделить их с помощью некоторой строки?

ответ

5

Пример кода:

NSMutableArray *mainArray = [[NSMutableArray alloc] init]; 
for (int i = 0; i < bigArray.count ; i++) 
{ 
    [mainArray addObjectsFromArray:[bigArray objectAtIndex:i]]; 
} 
NSLog(@"mainArray :: %@",mainArray); 
+0

Может быть, можно использовать NSMutableArray?) И в конце [[NSArray alloc] initWithArray: ...] – Sk0prion

+0

@ Sk0prion: Не нужно использовать 'NSMutableArray', пока OP не захочет добавить что-то позже в Array. – Bhavin

+0

получил это ... изменение отмечено .. – user23790

-1
NSMutableArray *arr1 = [NSMutableArray arrayWithArray:[initialArray objectAtIndex:0]]; 
[arr1 addObjectsFromArray:[initialArray objectAtIndex:1]]; 

Теперь arr1 содержит все объекты

+1

Это предполагает, что входной массив содержит только два подмассива. –

1

Пример кода:

NSArray* arrays = @(@(@"http://aaa/product/8_1371121323.png",@"http://aaa/product/14_1371123271.png"),@(@"http://aaa/product/9_1371121377.png")); 
NSMutableArray* flatArray = [NSMutableArray array]; 
for (NSArray* innerArray in arrays) { 
    [flatArray addObjectsFromArray:innerArray]; 
} 

NSLog(@"%@",[flatArray componentsJoinedByString:@","]); 
+2

1) NSArray * arr = @ [@ [.., ..], @ [..]]. 2) В конце вы получите массив с 2 элементами вместо 3. – Sk0prion

+0

просто передайте массив .. я проигнорировал первую строку – user23790

101

Это может быть сделано в одной строке, если вы не возражаете использовать кодирование с ключом (КВЦ). Оператор коллекции @unionOfArrays выполняет именно то, что вы ищете.

Возможно, вы столкнулись с KVC чаще всего в предикатах, привязках и подобных местах. Тем не менее, можно назвать в обычном коде Objective-C, как это:

NSArray *flatArray = [array valueForKeyPath: @"@unionOfArrays.self"]; 

Есть другие операторы сбора в КВЦ, все приставочные с @ знаком. Об этом в docs.

+0

Очень приятно! Мне просто интересно: вы проверили, работает ли это с более глубоко вложенными массивами? –

+0

@MartinR уверен, что вы не можете заставить операторов коллекции работать рекурсивно на произвольные глубины, но это работает на многомерных массивах. Я опубликовал вопрос с автоответчиком с результатами небольшого эксперимента: http://stackoverflow.com/q/17109942/644348 – Monolo

+3

+1, KVC всегда замечательный. – Bhavin

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