0

「ノード」インスタンスのコレクションがあるとします。それらをグループ化するために、整数プロパティ呼び出し zIndex が使用されます。

それらを格納するための長所/短所は何ですか: 1) 配列の配列 2) 配列の辞書

疑似コードでは、期待される結果を次のように記述します。

zBuffer[100] = [node1, node 2];
zBuffer[105] = [playerNode, collectable1];
zBuffer[110] = [foreground1, foreground2];

そして、私は zBuffers がどうあるべきかについて疑問に思っています。NSArray はシーケンシャルな読み取り/書き込みにのみ使用する必要がありますか? 非連続インデックスを使用しないのは好きですか?

私はNSMutableArrayで試しました:

[zBuffer objectAtIndex:zOrder]

ただし、配列にそのインデックスのデータが含まれていない場合は失敗します (範囲外の例外など)。

アドバイスありがとうございます!J

4

2 に答える 2

2

私が見る限り、あなたの要件の 1 つは、アクセスzBufferに使用するインデックスが連続していない (100、105、100) ことです。この場合、配列で使用できるインデックスは配列の要素よりも小さい必要があるため、配列は使用しませんcount(3 つの要素がある場合、インデックスの範囲は 0 から 2 です)。

代わりにNSMutableDictionary、探しているオブジェクトのグループの「名前」として zIndex キーを使用できる を使用します。

この提案では、その他の要件、特にノードのコレクションに対して (zIndex を介してノードにアクセスする以外に) 実行する複雑さと操作の種類を考慮していません。

于 2012-04-28T09:19:12.347 に答える
1

実際には両方を提供できます。あなたが持ちたいのはスパース配列のようです: したがって、インデックスでオブジェクトを検索しますが、特定のインデックスにオブジェクトが存在しないことは許容されます。だからあなたはそれを作ることができました。

文書化されたプリミティブ メソッドNSMutableArrayを実装するサブクラスを作成することでそれを行います。内部的には、サブクラスはストレージに を使用し、数値 (「塗りつぶされた」インデックス) をキーとして使用します。その番号をキーとして持つオブジェクトを返すか、その時点で配列が空の場合に返します。NSMutableDictionary-objectAtIndex:nil

この配列コントラクトの使用にはいくつかのあいまいさがあり、対処方法を決定するのはあなた次第です。

  • count1+(使用中の最大インデックス)、または配列内のオブジェクトの数を返しますか?
  • 列挙子および高速列挙パターンは を参照することを想定してnilいないため、クラスのユーザーに配列を列挙させたい場合は、常にオブジェクトを返す列挙子を考え出す必要があります (ただし、オブジェクトのインデックスを確認できます)。
  • 番兵として+arrayWithObjects: (id) firstObject,...使用するため、初期化子のパターンで初期化することはできません。nil
于 2012-04-28T09:25:22.090 に答える