私は空の可変配列を持っています。たとえば、インデックス0と1に何もないのに、インデックス2にオブジェクトを挿入することは可能ですか?容量を動的に増やすなどのことです。 。NSMutableArrayはインデックスにオブジェクトを挿入します
答えて
NSMutableArray
はスパース配列ではありません。後で入力できる空のスロットは許可されません。 initWithCapacity:
は、配列に特定の量まで塗りつぶされることを示唆しています。実際には実際には必要ではありません。配列内で押し込むアイテムの数を正確に把握していない場合は、呼び出すのをやめてください(ちょうどinit
を使用してください)。
オブジェクトが追加されると、変更可能な配列のサイズがかなり大きくなります。
「穴」をサポートするデータ構造が必要な場合は、何か他のものを使用するか、空であるはずのスロットにプレースホルダオブジェクトを配置します。
I.e.あなたは10個のスロットを持つ配列を望んでいた場合、あなたが行う可能性があります:
NSMutableArray *a = [NSMutableArray array];
for(int i = 0; i<10; i++) [a addObject: [NSNull null]];
をあなたはその後、スロットが空であるかどうかを知るために取得したオブジェクトisEqual: [NSNull null]
かどうかを確認することができます。 replaceObjectAtIndex:withObject:
を使用すると、特定のインデックスにオブジェクトを貼り付けることができます。
また、別のデータ構造を使用することもできます。索引をキーとする辞書が機能します。
必要に応じて 'NSNull'オブジェクトを自動的に追加し、要素がnullオブジェクトで、代わりにnilを返すかどうかをチェックするために、いくつかのカテゴリメソッドを追加できます。これは私がそれをした方法です:http://cutecoder.org/programming/behold-holy-array/ – adib
これにはNSPointerArrayを使用できます。
NSPointerArrayはNSArrayの後にモデル化された可変コレクション であるが、それはまた は、挿入または抽出することができるNULL値を保持することができ(かつ 、オブジェクトのカウントに寄与する)。 また、従来のアレイと異なり、 アレイの数を直接設定することができます 。
NSPointerArray
OS X 10.5以降とiOS 6.0以降で利用可能です。あなたがたとえば、することができます下のOSのバージョンをターゲットにする場合:
は
NSMutableDictionary
を使用して、あなたにNSNumber
Sのインデックスをラップし、キーとしてこれらを使用します。NSMutableArray
を使用し、「穴」にNSNull
オブジェクトを記入してください。
NSMutableDictionaryを使用してSparseArrayクラスを作成します。このようなもの(最小限のコード、ほとんどテストされていませんが、それはあなたにアイデアを与えるべきです)。
@interface SparseArray : NSObject {
@private
NSMutableDictionary* _dict;
int count;
}
-(SparseArray*)initWithCapacity:(NSUInteger)anInt;
-(id)objectAtIndex:(int)anIndex;
-(void)insertObject:(id)anObject atIndex:(int)anIndex;
- (void)removeObjectAtIndex:(int)anIndex;
-(int)count;
@implementation SparseArray
-(SparseArray*)initWithCapacity:(NSUInteger)anInt {
if ((self = [super init])) {
_dict = [[NSMutableDictionary dictionaryWithCapacity:anInt] retain];
count = 0;
}
return self;
}
-(id)objectAtIndex:(int)anIndex {
NSNumber* key = [NSNumber numberWithInt:anIndex];
id object = [_dict objectForKey:key];
return object;
}
-(void)insertObject:(id)anObject atIndex:(int)anIndex {
NSNumber* key = [NSNumber numberWithInt:anIndex];
[_dict setObject:anObject forKey:key];
count++;
}
- (void)removeObjectAtIndex:(int)anIndex {
NSNumber* key = [NSNumber numberWithInt:anIndex];
id object = [_dict objectForKey:key];
if (object) {
[_dict removeObjectForKey:key];
count--;
}
}
-(int)count {
return count;
}
-(void)dealloc {
[_dict release];
[super dealloc];
}
@end
残念ながら、このオブジェクトは高速列挙をサポートしていません。 NSFastEnumerationを実装して追加したとしても、実装は非常に非効率的であるか、列挙が順序付けされることを保証しません(配列オブジェクトから期待されるように)。 – jhabbott
- 1. elasticsearchオブジェクトをインデックスに挿入
- 2. レルムのインデックスにオブジェクトを挿入
- 3. オブジェクトのプロパティに応じてNSMutableArrayインデックスを取得しますか?
- 4. NSMutableArrayへの挿入のスケジュール
- 5. NSMutableArrayに新しい行を挿入するには?
- 6. NSMutableArrayの中のNSMutableDictionaryの中にあるNSMutableArrayにデータを挿入するには?
- 7. NSMutableArrayにオブジェクトを挿入するときに 'Program received signal:SIGABRT'が返される
- 8. 'をJSオブジェクトに挿入します。
- 9. ラケットにテキスト%オブジェクトのテキストを挿入、挿入、または設定します
- 10. 特定のインデックスでオブジェクトを配列に挿入する
- 11. Whats faster:インデックス0またはarray.Reverseに挿入しますか?
- 12. コレクションにオブジェクトを挿入する方法特定のインデックスのLaravelのオブジェクト
- 13. Xamarin NSMutableArrayのの中に挿入し<T>結果
- 14. jqueryなしのインデックスにHTMLテーブル行クローンを挿入します。
- 15. クラスタ化インデックスまたはクラスタ化インデックスなしでテーブルにレコードを挿入
- 16. NSMutableArrayのオブジェクトを追加します。
- 17. Reactjsは、以前に挿入されたオブジェクトに挿入されたオブジェクトを複製します。
- 18. Bisectは挿入されたアイテムのインデックスを保持します
- 19. Global.asaxにオブジェクトを挿入するには?
- 20. インデックスにリストを挿入する
- 21. 特定のインデックス(PHP)の配列に "do_action"を挿入します
- 22. 新たに挿入されたインデックス値を返します
- 23. 選択されたオブジェクトの前にオブジェクトを挿入します。
- 24. MongoDBオブジェクトの配列にオブジェクトを挿入します。
- 25. コアデータ、NSMutableArrayにはNSManagedObjectが含まれています。オブジェクトは配列の最初のNSManagedObjectを挿入した後にnilになります。
- 26. passport.authenticateは、Googleログインでリクエストにnullオブジェクトを挿入します。
- 27. PHP - ハッシュ配列、インデックスに挿入しますか?
- 28. std vector size keep ground同じインデックスに挿入しますが
- 29. SQliteの挿入は常に同じインデックスで行われます
- 30. ジオメトリポリゴンの挿入ポイントをインデックスに追加
うーん、なぜあなたはそれを行うたいでしょうか? :) – Mikael
私は大学で私のミニプロジェクトに必要です。:) – GeRyCh