_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()
と同等の関数はありますか?
ありがとうございました。
次の行に沿って例を実装する必要があります。
編集:
//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]
を呼び出すようにしてください'辞書を終了しました)。
他の答えは正しいですが、現在、このためのより新しい構文があります。のではなく:
[myDictionary setObject:nextValue forKey:myWord];
あなたは単に言うことができます:
myDictionary[myWord] = nextValue;
同様に、値を取得するには、myDictionary[key]
を使用して値(またはnil)を取得できます。
うん:
- (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"
];
読みやすいようにクレイジーなインデント。