2

後で使用するために、NSMutableArrayに設定された容量をどのように入力しますか?

基本的に、ゲームオブジェクトのマップとして機能するようにNSMutableArrayを設定したいので、この行があります...

gameObjects = [[NSMutableArray alloc] initWithCapacity:mapWidth*mapHeight];

私がMutableArrayを作成して埋めることを望んでいたので、この種のインデックスでアクセスできます...

int ii = (cellY*mapWidth)+cellX;

NSDictionary *currentObject = [gameObjects objectAtIndex:ii];

しかし、initWithCapacityが配列を埋めないことを知ったので、それを埋めるために空白のオブジェクトを作成する必要がありますか、それとも埋めることができるNullがありますか?また、2つのforループでそれを行うのでしょうか、それとも「initWith:myObject」のような命令がありますか?

配列内の特定のインデックスをチェックして、そこにオブジェクトがあるかどうかを確認できるようにしたいので、そのインデックスポイントにアクセスできる必要があります。これは、そこに何かがあるか、取得した場合にのみ実行できます。範囲外エラー。

このNSMutableArrayをオブジェクトのグリッドとして使用します。これは、2次元配列として編成された1次元配列であるため、何かのmapWidth * mapHeightで埋めてから、インデックスを計算して実行する必要があります。配列内のそのインデックスのチェック。

私はここを見てグーグルで検索しましたが、私が求めているもののようなものを見つけることができませんでした。

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

4

3 に答える 3

4

あなたが探しているのはです[NSNull null]。それはまさにあなたが望むものです-プレースホルダー値。

この質問のトピックに関する詳細情報を見つけることができます。

于 2012-11-05T01:20:55.753 に答える
3

initWithCapacityこれは単なるパフォーマンスの最適化です。配列の動作には影響せず、エントリを追加するときに「内部」のコードが内部配列を繰り返し拡大する必要がないようにします。

したがって、「事前に割り当てられた」配列が必要な場合は、NSNullオブジェクトなどで埋める必要があります。isKindOfClass次に、オブジェクトが正しいタイプであるかどうかを判断するために使用するか、単に==エントリをと比較することができ[NSNull null]ます。(NSNullオブジェクトは1つしかないため、常に同じアドレスになります)。

nil(または、空のスロットの値を持つポインターのCスタイルの配列を使用することもできます。)

ただし、代わりにNSMutableDictionaryを使用する方がよい場合があります。事前に入力する必要はなく、要素がない場合はnilポインタが返されます。キーには、配列インデックスとなるものに対応するNSNumberオブジェクトを使用します。

于 2012-11-05T01:42:34.230 に答える
0

initWithCapacityNSMutableArrayこれだけ多くのオブジェクトをサポートする必要があることを示唆するだけです。追加するまで、実際にはオブジェクトは含まれません。さらに、配列内のすべてのエントリはオブジェクトへのポインタであり、標準のc配列に通常あるような構造体ではありません。

問題についての考え方を変える必要があります。配列にオブジェクトを追加しない場合、そのオブジェクトは配列に含まれていません。つまり、あなたが言ったように、配列に「空の」オブジェクトを事前に入力することもできますが、これは奇妙なことです。または、必要に応じてオブジェクトを追加できます。

于 2012-11-05T01:21:39.077 に答える