2009-03-12 4 views

Antwort

44

Zuerst sollten Sie eine Klasse verwenden, um die Strings Ihres inneren Arrays zu halten oder sie aus einer PLIST-Datei zu laden (in der es einfach ist, ein 2D-Array von Strings zu erstellen).

Für direkte Deklarationen haben Sie ein paar Optionen. Wenn Sie eine NSArray verwenden möchten, müssen Sie manuell, um die Struktur wie folgt zu erstellen:

NSMutableArray *strings = [NSMutableArray array]; 
for(int i = 0; i < DESIRED_MAJOR_SIZE; i++) 
{ 
    [strings addObject: [NSMutableArray arrayWithObject:@"" count:DESIRED_MINOR_SIZE]]; 
} 

Oder Array Literale verwenden, können Sie eine unveränderlich Version wie diese:

NSArray *strings = @[ @[ @"A", @"B", @"C" ], @[ @"D", @"E", @"F" ], @[ @"G", @"H", @"I" ] ] 

Sie können es dann wie folgt verwenden:

NSString *s = [[strings objectAtIndex:i] objectAtIndex:j]; 

diese etwas umständlich zu initialisieren, aber es ist der Weg zu gehen, wenn Sie die NSArray Methoden verwenden möchten.

Eine Alternative ist C-Arrays zu verwenden:

NSString *strings[MAJOR_SIZE][MINOR_SIZE] = {0}; // all start as nil 

Und es dann wie folgt verwenden:

NSString *s = strings[i][j]; 

Dies ist weniger umständlich, aber man muss vorsichtig sein, um behalten/kopieren und release Werte wie Sie sie in und entfernen Sie sie aus dem Array. (! Es sei denn, Sie verwenden ARC, natürlich) NSArray dies für Sie tun würden, aber mit C-Stil-Arrays, müssen Sie so etwas tun, um ein Array ersetzen:

[strings[i][j] release]; 
strings[i][j] = [newString retain]; 

Der andere Unterschied ist, dass Sie kann Nil in das C-artige Array setzen, aber nicht die NSArrays - dafür musst du NSNull verwenden. Werfen Sie einen Blick auf Stack Overflow Frage Cocoa: Memory management with NSString für mehr über NSString Speicherverwaltung.

+2

+1 für mich viel Tipparbeit zu speichern. – Abizern

12

Wenn Sie ein zweidimensionales Array von Strings deklarieren und initialisieren möchten, können Sie dies tun:

NSArray *myArray = [NSArray arrayWithObjects: 
         [NSArray arrayWithObjects:@"item 1-1", @"item 1-2", nil], 
         [NSArray arrayWithObjects:@"item 2-1", @"item 2-2", nil], 
         [NSArray arrayWithObjects:@"item 3-1", @"item 3-2", nil], 
         [NSArray arrayWithObjects:@"item 4-1", @"item 4-2", nil], 
         nil]; 

Dies hat den Vorteil, den Sie eine unveränderliche Array zu geben.

+0

Hallo Steve McLeod, wie bekomme ich den Wert von "Item 1-1" wenn ich myArray so habe. –

+1

[[myArray objectAtIndex: 1] objectAtIndex: 1] – Hackmodford

2

Ich könnte selbst Werbung sein, aber ich schrieb einen Wrapper über NSMutableArray für die einfache Verwendung als 2D-Array. Es ist verfügbar auf GitHub als CRL2DArray hier. https://github.com/tGilani/CRL2DArray

+0

Kommt aus Android (Java) Ich bin überrascht wie schwierig es ist ein 2D Array in obj-C zu erstellen, danke für den sehr nützlichen GitHub sir! –

+0

Das einzige Problem ist, dass ich wünschte, es gäbe mehr integrierte Methoden, die ein normales NSArray zählen kann, usw. Aber für den Moment werde ich es nur manuell tun! –

Verwandte Themen