web-dev-qa-db-ja.com

Objective-Cを使用してiOSのNSMutableDictionaryに値を追加する

_objective-c_の開発を開始していますが、キーと値のリストを実装するための最良の方法を尋ねたいと思います。

DelphiにはクラスTDictionaryがあり、次のように使用します。

_myDictionary : TDictionary<string, Integer>;

bool found = myDictionary.TryGetValue(myWord, currentValue);
if (found)
{
    myDictionary.AddOrSetValue(myWord, currentValue+1);
} 
else
{
    myDictionary.Add(myWord,1);
}
_

_objective-c_でどうすればよいですか?上記のAddOrSetValue() or TryGetValue()と同等の関数はありますか?

ありがとうございました。

15
Miguel E

次の行に沿って例を実装する必要があります。

編集:

//NSMutableDictionary myDictionary = [[NSMutableDictionary alloc] init];
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];

NSNumber *value = [myDictionary objectForKey:myWord];

if (value)
{
    NSNumber *nextValue = [NSNumber numberWithInt:[value intValue] + 1];
    [myDictionary setObject:nextValue  forKey:myWord];
} 
else
{
    [myDictionary setObject:[NSNumber numberWithInt:1] forKey:myWord]
}

(注:intまたは他のプリミティブをNSMutableDictionaryに直接格納することはできません。したがって、それらをNSNumberオブジェクトでラップする必要があり、必ず[myDictionary release]を呼び出すようにしてください'辞書を終了しました)。

49
Tom Jefferys

他の答えは正しいですが、現在、このためのより新しい構文があります。のではなく:

[myDictionary setObject:nextValue  forKey:myWord];

あなたは単に言うことができます:

myDictionary[myWord] = nextValue;

同様に、値を取得するには、myDictionary[key]を使用して値(またはnil)を取得できます。

9
Jesse Rusak

うん:

- (id)objectForKey:(id)key;
- (void)setObject:(id)object forKey:(id)key;

setObject:forKey:は、既存のオブジェクトを同じキーで上書きします。 objectForKey:は、オブジェクトが存在しない場合、nilを返します。

編集:

例:

- (void)doStuff {
  NSMutableDictionary *dict = [NSMutableDictionary dictionary];

  [dict setObject:@"Foo" forKey:@"Key_1"]; // adds @"Foo"
  [dict setObject:@"Bar" forKey:@"Key_2"]; // adds @"Bar"

  [dict setObject:@"Qux" forKey:@"Key_2"]; // overwrites @"Bar"!

  NSString *aString = [dict objectForKey:@"Key_1"]; // @"Foo"
  NSString *anotherString = [dict objectForKey:@"Key_2"]; // @"Qux"
  NSString *yas = [dict objectForKey:@"Key_3"]; // nil
}

再編集:特定の例には、よりコンパクトなアプローチがあります。

[dict
  setObject:
    [NSNumber numberWithInteger:([[dict objectForKey:@"key"] integerValue] + 1)]
  forKey:
    @"key"
 ];

読みやすいようにクレイジーなインデント。

4