2013-06-13 34 views
18

Mam tablicę takiego:spłaszczyć NSArray

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

i muszę utworzyć kolejną tablicę z tego jednego jak ten

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

W jaki sposób można to zrobić? Czy można łączyć wszystkie obiekty i rozdzielać je za pomocą jakiegoś ciągu?

Odpowiedz

5

próbki: kod

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

Może esear używa NSMutableArray?) I na koniec [[NSArray alloc] initWithArray: ...] – Sk0prion

+0

@ Sk0prion: Nie trzeba używać 'NSMutableArray', dopóki OP nie chce dodać czegoś później w Tablicy. – Bhavin

+0

Mam to ... Zmiana zanotowana .. – user23790

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

Teraz arr1 zawiera wszystkie obiekty kod

+1

Zakłada się, że tablica wejściowa ma tylko dokładnie dwie pod-macierze. –

1

próbki:

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) Na końcu otrzymasz tablicę z 2 elementami zamiast 3. – Sk0prion

+0

po prostu przekazujesz tablicę .. Zignorowałem pierwszą linię – user23790

101

Można to zrobić w jednej linii, jeśli nie masz nic przeciwko używaniu kodowania klucz-wartość (KVC). Operator kolekcji @unionOfArrays spełnia dokładnie to, czego szukasz.

Prawdopodobnie najczęściej napotykasz KVC w predykatach, wiązaniach i podobnych miejscach. Jednak można go nazwać normalnym kod Objective-C tak:

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

Istnieją inne podmioty kolekcję w KVC, wszystkie z prefiksem @ znak. Więcej informacji na ten temat można znaleźć w docs.

+0

Bardzo ładnie! Jestem ciekawy: czy sprawdziłeś, czy to działa z bardziej zagnieżdżonymi tablicami? –

+0

@MartinR dość pewny, że nie można uzyskać operatorów kolekcji do pracy rekurencyjnie do dowolnych głębokości, ale ten działa na wielowymiarowych tablicach. Opublikowaliśmy pytanie z odpowiedziami na własne pytania z wynikami małego eksperymentu: http://stackoverflow.com/q/17109942/644348 – Monolo

+3

+1, KVC jest zawsze cudowne. – Bhavin