NSDictionary - Потрібно перевірити, чи містить словник пару ключ-значення чи ні


96

Мені просто потрібно запитати щось наступне. Припустимо, у мене є словник.

NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
[xyz setValue:@"sagar" forKey:@"s"];
[xyz setValue:@"amit" forKey:@"a"];
[xyz setValue:@"nirav" forKey:@"n"];
[xyz setValue:@"abhishek" forKey:@"a"];
[xyz setValue:@"xrox" forKey:@"x"];

Тепер мені потрібно перевірити так

[xyz дійсно містить значення "b" значення ?? пари чи ні?

Питання - як?

Інше питання - як просто підрахувати загальну пару ключ-значення?

Скажіть, наприклад NSInteger mCount=[xyz keyCounts];

Відповіді:


193

Просто запитайте його objectForKey:@"b". Якщо він повертається nil, за цим ключем не встановлюється жоден об'єкт.

if ([xyz objectForKey:@"b"]) {
    NSLog(@"There's an object set for key @\"b\"!");
} else {
    NSLog(@"No object set for key @\"b\"");
}

Редагувати : Щодо вашого відредагованого другого питання, це просто NSUInteger mCount = [xyz count];. Обидві ці відповіді добре задокументовані, їх легко знайти в довідковому класі NSDictionary ( [1] [2] ).


+1 Насправді в документації прямо йдеться про це: developer.apple.com/mac/library/documentation/Cocoa/Reference/…
Дейв ДеЛонг

6
Що робити, якщо ключ присутній у словнику і його значення дорівнює 0? Хіба ми помилково не подумаємо, що ключа взагалі немає у словнику?
jbx72487

13
@ jbx72487 Словники повинні містити об’єкти; objectForKey:повертає idпокажчик - на об'єкт Objective-C. Якщо ви зберігаєте номери, їх потрібно " помістити " у номер NSNumber . Навіть якщо NSNumber дорівнює нулю або хибному, він все одно буде дійсним покажчиком, і вищевказаний код точно виявить існування.
Matt B.

не працює зі мною, він повертає наступне: Завершення програми через невпійманий виняток 'NSInvalidArgumentException', причина: '- [__ NSSingleObjectArrayI objectForKey:]: невпізнаний селектор надіслано в екземпляр 0x60000133a1c0'
Amr Angry

2

За допомогою буквального синтаксису ви можете перевірити наступне

static const NSString* kKeyToCheck = @"yourKey"
if (xyz[kKeyToCheck])
  NSLog(@"Key: %@, has Value: %@", kKeyToCheck, xyz[kKeyToCheck]);
else
 NSLog(@"Key pair do not exits for key: %@", kKeyToCheck); 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.