3

たとえば、私は配列を持っています:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];

配列は次のようになります。

0 => @1
1 => @2
2 => @3

次に、インデックス 0 のオブジェクトを削除します

[array removeObjectAtIndex:0];

...および NSMutableArray は自動的に配列のインデックスを再作成するため、配列は次のようになります。

0 => @2
1 => @3

質問:削除時にアレイの自動インデックス再作成を無効にすることはできますか? または、NSMutableArray の代わりに使用する同様のクラスはありますか? ありがとう。

4

2 に答える 2

4

不連続なインデックスを持つことはできないため、プレースホルダー オブジェクトを使用して削除されたオブジェクトを置き換えることが最善の方法です。何かのようなもの

NSMutableArray *array = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
[array replaceObjectAtIndex:0 withObject:[NSNull null]];

今、あなたは持っているでしょう

0 => [NSNull null]
1 => @2
2 => @3

そのため、null 以外のオブジェクトのインデックスは保持されます。

于 2013-08-22T15:10:51.830 に答える
2

NSMutableArrayいいえ、実際に からオブジェクトを削除して、インデックスを更新することはできません。ただし、 a ( a の数値インデックスではなくa ( a の場合もある)NSMutableDictionaryを使用する場合) を使用すると、目的の効果を得ることができます。keyNSNumberNSUIntegerNSMutableArray

NSMutableDictionary *dictionary = [@{@0 : @1,
                                     @1 : @2,
                                     @2 : @3} mutableCopy];

NSLog(@"before: %@", dictionary);

[dictionary removeObjectForKey:@0];

NSLog(@"after: %@", dictionary);

収量:

前: {
    0 = 1;
    1 = 2;
    2 = 3;
}
後: {
    1 = 2;
    2 = 3;
}

したがって、代わりに:

NSNumber *number = [array objectAtIndex:0];

あなたが使用するだろう:

NSNumber *number = [dictionary objectForKey:@0];

または、代わりに:

NSNumber *number = array[0];

あなたが使用するだろう:

NSNumber *number = dictionary[@0];
于 2013-08-22T15:08:28.680 に答える