web-dev-qa-db-ja.com

NSDictionaryに追加する方法

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

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

85
jarryd

mutable辞書は変更できます。つまり、オブジェクトを追加および削除できます。 不変は、作成されると修正されます。

作成して追加:

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

そして取得:

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

設定により、NSMutableDictionaryオブジェクトのsetValue:(id)value forKey:(id)keyメソッドを使用します。

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

または、最新のObjective-Cの場合:

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

可変と「通常」の違いは、まあ、可変性です。つまりNSMutableDictionary(およびNSMutableArray)の内容は変更できますが、「通常の」NSDictionaryおよびNSArrayでは変更できません

32
Eimantas

配列が宣言されたら、次のようにNSDictionaryにKey-Valueを追加するだけです

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"];
14
Madhu

更新バージョン

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
9

あなたが尋ねたいのは、「可変配列と非可変配列または辞書の違いは何か」です。多くの場合、すでに知っていることを説明するために異なる用語が使用されます。この場合、「可変」という用語を「動的」に置き換えることができます。したがって、可変ディクショナリまたは配列は「動的」で実行時に変更できるものですが、非可変ディクショナリまたは配列は「静的」でコード内で定義され、実行時に変更されないものです(言い換えれば、 、要素を追加、削除、または並べ替えることはありません。)

それがどのように行われるかについては、ここでドキュメントを繰り返すようにお願いしています。必要なのは、サンプルコードとXcodeドキュメントを検索して、それがどのように行われるかを正確に確認することです。しかし、私が最初に学んでいたとき、可変性の事も私を投げたので、私はあなたにそれをあげます!

1
Mark Hernandez

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

NSMutableDictionary buttons = [[NSMutableDictionary alloc] initWithDictionary: @{
    @"touch": @0,
    @"app": @0,
    @"back": @0,
    @"volup": @0,
    @"voldown": @0
}];
0
Topher Fangio