2009-03-12 14 views
25

Objective-Cで文字列型の2次元配列を宣言するにはどうすればよいですか?Objective-Cで文字列型の2次元配列を宣言するにはどうすればよいですか?

+0

あなたがNS(Mutable)Arrayを話しているなら、それを「宣言」しないでください。 NSArrayにはコンテンツタイプが割り当てられていないので、外部配列を宣言するだけです。どのように使用するかはあなた次第です。 –

答えて

44

まず、クラスを使用して内部配列の文字列を保持するか、plistファイルから読み込み(文字列の2次元配列を作るのは簡単です)、考えてみましょう。

直接宣言の場合、いくつかのオプションがあります。あなたがNSArrayのを使用したい場合は、手動でこのような構造を作成する必要があります:

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

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

または、配列リテラルを使用して、あなたはこのような不変バージョンを取得することができます

あなたは、このようにそれを使用することができます:

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

これは、初期化がややぎこちないですが、NSArrayのメソッドを使用する場合には、移動するための方法です。

代替がC配列を使用することです。その後、

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

そして、このようにそれを使用します。

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

これはそれほど厄介ですが、に注意する必要がありをコピー/維持の値を入力して配列から削除します。 (あなたはもちろん、ARCを使用している場合を除き!)にNSArrayはあなたのためにこれを行うだろうが、Cスタイルの配列で、あなたは配列を置き換えるために、このような何かを実行する必要があります。他の違いは、あなたということです

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

NSArraysではなくCスタイルの配列にnilを置くことができます。NSArrayを使用する必要があります。 NSStringメモリ管理の詳細については、Stack Overflowの質問Cocoa: Memory management with NSStringもご覧ください。

+2

+1私は多くの入力を節約します。 – Abizern

12

あなたは、文字列の2次元配列を宣言し、初期化したい場合は、あなたがこれを行うことができます:

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]; 

これはあなたの不変の配列を与えるという利点があります。

+0

こんにちはSteve McLeod、私はこのようなmyArrayを持っている場合、私は "アイテム1-1"の価値を得ることができます。 –

+1

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

2

私は自己宣伝広告かもしれませんが、私はNSMutableArrayの前に2次元配列として簡単にラッパーを書いています。これはGitHubでCRL2DArrayとして利用できます。 https://github.com/tGilani/CRL2DArray

+0

Android(Java)から来るobj-Cで2次元配列を作成するのがいかに難しいか、非常に便利なGitHubサー! –

+0

唯一の問題は、通常のNSArrayにはcountなどのような組み込みのメソッドがあることが欲しいということです。 –

関連する問題