2012-01-07 9 views
-2

私はいつもArraysについて疑問を持っていました。Objective-Cではどのように配列が動作しますか?

配列の数が7で、2番目の要素を 'NULL'に置き換えた場合でも、カウントは7ですか?

アレイのカウントが7で、最後の要素を 'NULL'に置き換えた場合、カウントは7ですか?それとも、カウント6ですか?

Arrayの最初の要素(place '0')を削除する関数を作成し、Arrayの他の要素を1つ前の場所に置き換える必要があります。

- (void) eat { 
    [foodArray replaceObjectAtIndex:0 withObject:NULL]; 
    for (int i = 0; i<[foodArray count]-1; ++i){ 
     [foodArray replaceObjectAtIndex:i withObject:[foodArray objectAtIndex:i+1]]; 
    } 
    [foodArray replaceObjectAtIndex:[foodArray count]-1 withObject:NULL]; 
} 

これは機能しますか?

(ありがとう!)

編集:私はちょうど私はすでに、後の最初の要素を交換していて最初の行は、必要ありません気づきました。私が間違っている?

+3

NSMutableArrayに 'NULL 'を入れようとすると例外が発生します。これを試してみましたか? –

+0

あなたはMacであればNSPointerArrayを使うことをお勧めしますが、そうではないので、cocos2dライブラリのCCArrayを見てください。 –

答えて

1

オブジェクトを配列から削除する場合は、[foodArray removeObjectAtIndex:]を使用します。あなたがそれをやっている方法では、配列にnull値を残しているだけです。

+0

配列が[@ "Apple"、@ "Pear"、@ "Banana"オレンジ "]、私はそれが[@"梨 "、@"バナナ "、@"オレンジ "]になりたい。 その関数でインデックス '0'のオブジェクトを削除すると、インデックス '1'にあったオブジェクトは '0'になりますか? –

+1

@DavidDaSilvaContínはい、値を削除すると、以降の値はすべて移動されます。 NSArrayにはギャップがありません。 – JustSid

+0

はい。それは正しいです。 –

0

配列にNULLを入れようとするのは一般的には悪い考えです。 何らかの種類のプレースホルダを使用する必要がある場合は、NSNullクラスのインスタンスを使用する方がよいでしょう。

後で、クラス名のチェックを使用してオブジェクトの種類を確認することができます。

if([objectFromArray isKindOfClass:[NSNull class]] == YES) 
    { // This is NSNull instance, not real object } 
+0

それは私が欲しいものではありませんが、私はそれについて知りませんでした。ほんとありがと!私が今日学んだ別のこと:) –

+0

それから、不要なアイテムを取り除き、空のセルは気にしないでください。 NSMutableArrayはオブジェクトチェーンを使用しています - それはC言語配列とはまったく異なります:) – AlexeyVMP

+1

"悪い考え"ではありません。NSArrayに 'NULL' /' nil'を置くことは全く不可能です。 –

1

ジャスト項目削除:INORDERは、配列は変更可能でなければなりません削除/配列の要素を追加する

- (void) eat { 
    [foodArray removeObjectAtIndex:0]; 
} 

を:NSMutableArray foodArrayはNSMutableArrayである必要があります。

+0

ありがとう!それは変更可能なので、動作します。 –

+1

@DavidDaSilvaContín宣言が与えられていないことを確認するだけです。 – zaph

関連する問題