2013-06-13 8 views
18

Ich habe ein Array wie folgt aus:Flatten eine NSArray

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

und ich habe ein anderes Array erstellen aus, dass eine ähnliche

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

Wie kann ich das tun? Ist es möglich, alle Objekte zu kombinieren und sie mit einem String zu trennen?

Antwort

5

Beispielcode:

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

Vielleicht esear NSMutableArray?) Und am Ende [[NSArray alloc] initWithArray: ...] – Sk0prion

+0

@ Sk0prion: Keine Notwendigkeit, 'NSMutableArray' zu verwenden, bis das OP etwas später im Array hinzufügen möchte. – Bhavin

+0

habe es ... Änderung notiert .. – user23790

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

Jetzt arr1 enthält alle Objekte

+1

Dies setzt voraus, dass das Eingangsarray immer nur genau zwei Sub-Arrays hat. –

1

Beispielcode:

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) Am Ende erhalten Sie Array mit 2 Elementen anstelle von 3. – Sk0prion

+0

übergeben Sie einfach ein Array .. Ich ignorierte erste Zeile – user23790

101

Es kann in einer einzigen Zeile erfolgen, wenn Es macht Ihnen nichts aus, die Schlüsselwertcodierung zu verwenden (KVC). Der Inkassooperator @unionOfArrays macht genau das, wonach Sie suchen.

Sie haben KVC am häufigsten in Prädikaten, Bindungen und ähnlichen Orten gefunden.

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

Es gibt andere Sammlung Betreiber in KVC, alle mit @ Zeichen voran: Es kann jedoch in normalen Objective-C-Code wie folgt aufgerufen werden. Es gibt mehr darüber in der docs.

+0

Sehr schön! Ich bin nur neugierig: Haben Sie überprüft, ob das mit tiefer verschachtelten Arrays funktioniert? –

+0

@MartinR ziemlich sicher, dass Sie Sammlung-Operatoren nicht rekursiv auf beliebige Tiefen arbeiten können, aber das funktioniert bei mehrdimensionalen Arrays. Ich habe eine selbstbeantwortete Frage mit den Ergebnissen eines kleinen Experiments gepostet: http://stackoverflow.com/q/17109942/644348 – Monolo

+3

+1, KVC ist immer wunderbar. – Bhavin