2011-01-31 11 views
0

Obj-Cの多次元配列を扱う最良の方法は? NSArrayのNSArrayを作成し、Cスタイルの配列を使用し、STLで投げてC++スタイルの配列にすることを提案するものもあります。Obj-Cと多次元配列

私はオブジェクトの3次元配列が必要です。最高のものはNSArraysのNSArraysのNSArrayですか?それは混乱しているようだ。素敵なきれいな透明なAPIでn次元配列を扱うことができるオブジェクトはありますか?

クリーンでクリアなAPIの例:

obj = [MDArray getLayer: 1 atX: 10 atY: 10]; 
[MDArray setLayer: 1 atX: 10 atY: 10 withValue: object]; 

それが違いを作る場合は、私の最終目標は、ゲームの地図データです。私は物事のCスタイルに慣れていますが、obj-cを使うのは難しいです(私が行ったように学ぶ)。

+0

NSArrayとNSArrayをNSArrayで使用することができます...このような構造を横断するのは比較的簡単です。あなたがしたいことについて明確な目標を述べていないので、アドバイスするのは少し難しいです。 – aqua

+0

作業しているデータは何ですか? NSDictionaryがより適しているかもしれません。 'MDArray'というサブクラスを作成し、必要なオブジェクトを与えるコードを書くこともできます。 –

+2

標準のCocoa/UIKitパターン(参照によって複数の値を返す)に従わない限り、メソッドに 'get *'の名前を付けないでください。 – bbum

答えて

3

ネスティングは当然ですが、希薄な配列を行うことができるものが必要な場合を除き、時間の無駄です。

より良い解決策は、NSMutableArrayを作成し、NSNullsまたはNSPointerArrayで埋めて、setCount:メソッドでNullを許可することです。

次に、4 * 4 * 4(または64)スロットの座標(0..3,0.3,0.3)でオブジェクトを処理できるようにする必要がある場合は、

そこから、(x、y、z)座標を配列のスロットに変えることは、単なる乗算の問題です。 (1,2,3)は、インデックス(1 +(2 *幅)+(3 *幅*高さ))のオブジェクトです。

数学の単純なビットは、余分な割り当て(と余分な割り当ての断片メモリの可能性)を避けます。私は早めに最適化していないのですが、数学は簡単ですが、割り当てダンスはそうではありません。これは最初の実装が簡単です。

+0

非常に良い解決策。 – zoul

1

私はAurumがコメントで言ったように、独自の多次元配列ラッパーを書くことをお勧めします。

比較的単純です - ラッパーは配列の配列の配列を所有しますが、配列を走査する比較的醜いコードを隠すような方法を公開します。

0

標準ライブラリには多次元配列はありません。私は自分のクラスで物を包むだろう、それは非常に簡単です。以前の解が遅いことが証明された場合、実装はNSArrayまたはCの単純な配列にネストされます。