NSDictionaryに追加する方法


91

私はを使用しNSMutableArrayていましたが、辞書を使用するほうが私が達成しようとしていることよりもはるかに簡単であることに気付きました。

キーをとしてNSString、値をとしてint辞書に保存したい。これはどのように行われますか?次に、変更可能な辞書と通常の辞書の違いは何ですか?

回答:


197

変更可能な辞書はつまり、あなたがオブジェクトを追加したり削除することができ、変更することができます。不変は、それが作成されると固定されています。

作成して追加:

NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
[dict setObject:[NSNumber numberWithInt:42] forKey:@"A cool number"];

そして取得:

int myNumber = [[dict objectForKey:@"A cool number"] intValue];

容量で初期化する必要がありますか、それとも動的にできますか?
muttley91 2013

2
初期容量を指定する必要はありませんが、指定するとパフォーマンスが向上する場合があります。いくつのアイテムが含まれるかが事前にわかっている場合は、この数または少し大きい値を指定します。
エイコ

NSMutableDictionaryではなくNSDictionaryを要求しますか?
アナンタプラサード

34

オブジェクトのsetValue:(id)value forKey:(id)keyメソッドを使用するように設定することによりNSMutableDictionary

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setValue:[NSNumber numberWithInt:5] forKey:@"age"];

または現代のObjective-Cでは:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict[@"age"] = @5;

可変と「通常」の違いは、まあ、可変性です。つまり、あなたはの内容を変更することができますNSMutableDictionary(とNSMutableArray)あなたが「通常」でそれを行うことはできませんがNSDictionaryNSArray


2
その整数をNSNumberでラップすべきではありませんか?
Johan Kool、2010

これに関してもう1つ問題があります。ユーザーが入力したテキストを文字列と、ユーザーがテキストを保存する画像参照(画像の配列内のインデックス)として保存する必要があります。私は、2つの変数を持つオブジェクトのmutableArrayを試しました。tableViewに配列オブジェクトのテキスト値を入力しようとすると、うまく機能しませんでした。だから私は辞書を考えました、唯一の問題はインデックスでデータを取得できるように見えないことです、それはハッシュマップのようなキーまたは値でなければなりませんか?
システムの

@Johan-修正して更新しました!@alJaree-はい、ディクショナリはソートのキー値ストアです。あなたの立場では、辞書の配列を使うほうがいいと思います。次のようなもの[{image: "/path/to/img/1.jpg", data: "foo bar 1"}, {image: "/path/to/img/2.jpg", data: "foo bar 2"}, ..., {image: "/path/to/img/N.jpg", data: "foo bar N"}]
Eimantas 2010

各オブジェクトからテキストを取得し、それを使用してお気に入りのUITableViewに入力する必要があるだけでなく、選択したお気に入りの画像を取得して表示できるように、画像配列へのインデックス参照が必要なので、これはまだ機能しません。上記で説明したオブジェクトを試しましたが、格納された特定のオブジェクトではなく、何らかの理由でNSStringsが格納されている配列から読み取るときに返されたオブジェクトです。私はここで何をするべきか分かりません
システム

@ "%d _%@、index、savedTitleなどのNSStringを格納し、NSStringを分割して必要なものを取得してdipayするだけでよいと考えています。Java用語で考えています。 obj c。のsplit関数:)
システム

16

配列が宣言されたときは、キー値をNSDictionaryに追加するだけで済みます

NSDictionary *normalDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Value1",@"Key1",@"Value2",@"Key2",@"Value3",@"Key3",nil];

このNSDictionaryでキー値を追加または削除することはできません

NSMutableDictionaryの場合と同様に、このメソッドを使用して配列の初期化後にオブジェクトを追加できます

NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc]init];'
[mutableDict setObject:@"Value1" forKey:@"Key1"];
[mutableDict setObject:@"Value2" forKey:@"Key2"];
[mutableDict setObject:@"Value3" forKey:@"Key3"];

キー値を削除するには、次のコードを使用する必要があります

[mutableDict removeObject:@"Value1" forKey:@"Key1"];

12

バージョンを更新

Objective-C

作成:

NSDictionary *dictionary = @{@"myKey1": @7, @"myKey2": @5}; 

変化する:

NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];     //Make the dictionary mutable to change/add
mutableDictionary[@"myKey3"] = @3;

省略構文はと呼ばれObjective-C Literalsます。

迅速

作成:

var dictionary = ["myKey1": 7, "myKey2": 5]

変化する:

dictionary["myKey3"] = 3

1

質問したいのは、「変更可能な配列と変更不可能な配列または辞書の違いは何ですか」です。多くの場合、すでに知っていることを説明するためにさまざまな用語が使用されます。この場合、「可変」という用語を「動的」に置き換えることができます。したがって、変更可能な辞書または配列は「動的」であり、実行時に変更できるものですが、変更不可能な辞書または配列は「静的」であり、コードで定義され、実行時に変更されないものです(つまり、 、要素の追加、削除、または並べ替えは行いません。)

それがどのように行われるかに関して、あなたはここでドキュメントを繰り返すように私たちに求めています。必要なのは、サンプルコードとXcodeドキュメントを検索して、それがどのように行われるかを正確に確認することだけです。しかし、私が最初に学んでいたとき、変更可能なものも私を驚かせたので、それをあなたにあげましょう!


Xcodeのドキュメントに十分な説明がない場合もあります。明確な例がなくても、深い理論に陥ることがありますが、常にではない場合もあります。:Pええ、私は変更可能な(変更可能)部分を理解しました。:)
システム

0

参考までに、リテラルを使用してinitWithDictionaryを初期化することもできますNSMutableDictionary

NSMutableDictionary buttons = [[NSMutableDictionary alloc] initWithDictionary: @{
    @"touch": @0,
    @"app": @0,
    @"back": @0,
    @"volup": @0,
    @"voldown": @0
}];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.