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」の値が含まれていますか?ペアかどうか?

質問はどうですか?

もう1つの質問は、Key-Valueペアの総数をカウントする方法ですか?

たとえば言う 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\"");
}

編集:編集した2番目の質問については、単純にNSUInteger mCount = [xyz count];です。これらの回答は両方とも文書化されており、NSDictionaryクラスリファレンス([1] [2])で簡単に見つけることができます。


実際には+1、ドキュメントはまっすぐこれは言う:developer.apple.com/mac/library/documentation/Cocoa/Reference/...
デイブ・デロング

6
キーが辞書に存在し、その値が0の場合はどうなりますか?キーがディクショナリにまったく存在しないと誤って考えませんか?
jbx72487 2013

13
@ jbx72487辞書にはオブジェクトが含まれている必要があります。objectForKey:戻るid- Objective-Cのオブジェクトへのポインタ。数値を保存する場合は、NSNumberに「ボックス化」する必要があります。NSNumberがゼロまたはfalseであっても、それは有効なポインターであり、上記のコードは存在を正確に検出します。
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); 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.