Добавьте значения в NSMutableDictionary в iOS с помощью Objective-C
Я начинаю разработку 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()
?
Спасибо.
Ответы
Ответ 1
Вы хотите реализовать свой пример в следующих строках:
EDIT:
//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]
, когда вы закончили с словарь).
Ответ 2
Другие ответы верны, но для этого сейчас существует более современный синтаксис. Вместо:
[myDictionary setObject:nextValue forKey:myWord];
Вы можете просто сказать:
myDictionary[myWord] = nextValue;
Аналогично, чтобы получить значение, вы можете использовать myDictionary[key]
для получения значения (или nil).
Ответ 3
Да:
- (id)objectForKey:(id)key;
- (void)setObject:(id)object forKey:(id)key;
setObject:forKey:
перезаписывает любой существующий объект с тем же ключом; objectForKey:
возвращает nil
, если объект не существует.
Edit:
Пример:
- (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
}
Reedit: Для конкретного примера существует более компактный подход:
[dict
setObject:
[NSNumber numberWithInteger:([[dict objectForKey:@"key"] integerValue] + 1)]
forKey:
@"key"
];
Сумасшедший отступ для удобочитаемости.