2014-01-16 3 views
1

У меня есть массив, содержащий массив в каждом индексе в нем.Как удалить скобки и, из NSArray?

array is :(
     (
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-19g1.jpg", 
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-20g2.jpg", 
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-20g3.jpg" 
    ), 
     (
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-49y1.jpg", 
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-50y2.jpg" 
    ), 
     (
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-50y3.jpg", 
     "http://localhost/ColorPicker/upload/2014-01-14-04-01-51y6.jpg" 

    ) 
) 

Я хочу сделать один массив, который, как

( 
"http://localhost/ColorPicker/upload/2014-01-14-04-01-50y3.jpg", 
"http://localhost/ColorPicker/upload/2014-01-14-04-01-51y6.jpg", 
"http://localhost/ColorPicker/upload/2014-01-14-04-01-50y3.jpg", 
"http://localhost/ColorPicker/upload/2014-01-14-04-01-51y6.jpg",      
"http://localhost/ColorPicker/upload/2014-01-14-04-01-50y3.jpg", 
"http://localhost/ColorPicker/upload/2014-01-14-04-01-51y6.jpg" 
    ) 

Как можно устранить(),() внутри массива и сделать единый массив, содержащий URL.

+4

Эти символы не * в * массиве - они там чтобы помочь вам понять свалку. В этом случае у вас есть дамп массива, который содержит 3 других массива. –

+1

@HotLicks, я думаю, OP знает это. Он спрашивает, как создать новый плоский массив из вложенных массивов. –

ответ

2

вы должны нормализовать массив проведите по массиву, затем все его вспомогательные массивы и добавьте их в другой массив. . Что-то вроде этого должно быть достаточно, чтобы вы начали: here

8

Вам нужно создать новый массив:

NSMutableArray *newArray = [[NSMutableArray alloc] init]; 
for (NSArray *a in array) 
    [newArray addObjectsFromArray:a]; 
+0

Приятно для одноуровневого массива! – zaph

+0

О, я забыл о addObjectsFromArray. Отлично сработано. Проще, чем мой код. –

3

Вам нужно написать код, чтобы ходить ваш внешний массив, копирование содержимого массива второго уровня с «плоским» массивом. Что-то вроде этого:

(под редакцией на основе пост Карла NORUM на использование addObjectsFromArray)

-(NSArray)flattenArray: (NSArray *) sourceArray; 
{ 
    NSMutableArray *result = [[NSMutableArray alloc] init]; 
    for (NSArray *array sourceArray) 
    { 
    //Make sure this object is an array of some kind. 
    //(use isKindOFClass to handle different types of array class cluster) 
    if ([array isKindOfClass: [NSArray class]) 
    { 
    [result addObjectsFromArray: array]; 
    } 
    else 
    { 
    NSLog(@"Non-array object %@ found. Adding directly.", array); 
    [result addObject: array]; 
    } 
    return [result copy]; //return an immutable copy of the result array 
} 
+0

Это тихонько удаляет любые элементы без массива из исходного массива, что сбивает с толку. Крушение на неожиданной структуре нормально, но тихо игнорируя это опасно. Также нет причин возвращать копию. Нет ничего плохого в возвращении NSMutableArray напрямую. –

+0

У меня есть массив, где каждый индекс массива имеет другой массив. – Exception

+0

@ Rob Napier, я бы так же легко решил добавить объекты без массива в сплющенный массив. Такое решение по обработке ошибок зависит от потребностей приложения. Для сообщений в форуме я, как правило, делаю только голый минимум, который отвечает на вопрос, и оставляйте метод сглаживания во всех случаях проверки края в качестве упражнения для OP. –

6

Вы можете придавить свой массив с помощью Key-Value Coding оператор "@unionOfArrays":

NSArray *nested = @[@[@"A1", @"A2", @"A3"], @[@"B1", @"B2", @"B3"], @[@"C1", @"C2", @"C3"]]; 
NSArray *flattened = [nested valueForKeyPath:@"@unionOfArrays.self"]; 

NSLog(@"nested = %@", nested); 
NSLog(@"flattened = %@", flattened); 

Выход:

 
nested = (
     (
     A1, 
     A2, 
     A3 
    ), 
     (
     B1, 
     B2, 
     B3 
    ), 
     (
     C1, 
     C2, 
     C3 
    ) 
) 
flattened = (
    A1, 
    A2, 
    A3, 
    B1, 
    B2, 
    B3, 
    C1, 
    C2, 
    C3 
) 
+0

Ох! Да, скалы KVC обеспечивают надежное решение :) Я большой поклонник этого. +1 – Tirth

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