Objective-C Language
NSDictionary
サーチ…
構文
@ {key:value、...}
[NSDictionary dictionaryWithObjectsAndKeys:値、キー、...、nil];
dict [ key ] = value ;
id 値 = dict [ キー ];
備考
NSDictionaryクラスは、キーと値の不変な関連付けを管理するオブジェクトへのプログラムインターフェイスを宣言します。このクラスまたはそのサブクラスNSMutableDictionaryは、任意のキーに関連付けられたデータを検索するための便利で効率的な方法が必要な場合に使用します。 NSDictionaryは静的な辞書を作成し、NSMutableDictionaryは動的な辞書を作成します。 (便宜上、辞書という用語は、正確なクラスメンバーシップを指定せずにこれらのクラスのいずれかのインスタンスを参照します)。
辞書内のキーと値のペアをエントリと呼びます。各エントリは、キーを表す1つのオブジェクトと、そのキーの値である2番目のオブジェクトで構成されます。辞書内では、キーは一意です。つまり、1つの辞書内に2つのキーが等しい(isEqual :)で決まるキーはありません。一般に、キーはどのオブジェクトでもかまいません(NSCopyingプロトコルに準拠している場合 - 以下を参照)。キー値コーディングを使用する場合、キーは文字列でなければなりません(キー値コーディングの基礎を参照)。キーも値もゼロにすることはできません。辞書にヌル値を表す必要がある場合は、NSNullを使用する必要があります。
NSDictionaryは、Core FoundationのCFDictionaryRefを使用した「フリーダイヤル」ブリッジングです。フリーダイヤルの詳細については、フリーダイヤルを参照してください。
リテラルを使用した作成
NSDictionary *inventory = @{
@"Mercedes-Benz SLK250" : @(13),
@"BMW M3 Coupe" : @(self.BMWM3CoupeInventory.count),
@"Last Updated" : @"Jul 21, 2016",
@"Next Update" : self.nextInventoryUpdateString
};
dictionaryWithObjectsAndKeysを使用して作成:
NSDictionary *inventory = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:13], @"Mercedes-Benz SLK250",
[NSNumber numberWithInt:22], @"Mercedes-Benz E350",
[NSNumber numberWithInt:19], @"BMW M3 Coupe",
[NSNumber numberWithInt:16], @"BMW X6",
nil];
nil
は最後を意味するセンチネルとして最後のパラメータとして渡さなければなりません。
ディクショナリをこのようにインスタンス化すると、値が最初に、キーが2番目になることを覚えておくことが重要です。上記の例では、文字列はキーであり、数値は値です。メソッドの名前もこれを反映します: dictionaryWithObjectsAndKeys
。これは間違ってはいませんが、ディクショナリ(リテラル付き)をインスタンス化する、より現代的な方法が好まれます。
plistsを使って作成する
NSString *pathToPlist = [[NSBundle mainBundle] pathForResource:@"plistName"
ofType:@"plist"];
NSDictionary *plistDict = [[NSDictionary alloc] initWithContentsOfFile:pathToPlist];
NSDictionaryに値を設定する
NSDictionaryにキーのオブジェクトを設定するには、値を取得する方法に応じて複数の方法があります。たとえば、車のリストにランボルギーニを追加するには
標準
[cars setObject:lamborghini forKey:@"Lamborghini"];
他のオブジェクトと同様に、NSDictionaryのメソッドを呼び出して、キーのオブジェクトobjectForKey:
を設定します。これをsetValue:forKey:
と混同しないように注意してください。これはまったく別のものです。 キー値コーディング
省略名
cars[@"Lamborghini"] = lamborghini;
これは、C#、Java、Javascriptなどの他の言語の辞書に使用する構文です。これは標準の構文よりはるかに便利で、おそらく読みやすく(特にこれらの他の言語でコードする場合)、もちろん標準ではありません。 Objective Cの新しいバージョンでのみ利用可能です
NSDictionaryから値を取得する
キーを持つNSDictionaryからオブジェクトを取得するには、複数の方法があります。例えば、車のリストからランボルギーニを得るには
標準
Car * lamborghini = [cars objectForKey:@"Lamborghini"];
他のオブジェクトと同じように、NSDictionaryのメソッドを呼び出すと、キーのオブジェクトであるobjectForKey:
。これをvalueForKey:
と混同しないよう注意してvalueForKey:
。これはまったく別のものです。 キー値コーディング
省略名
Car * lamborghini = cars[@"Lamborghini"];
これは、C#、Java、Javascriptなどの他の言語の辞書に使用する構文です。これは標準の構文よりはるかに便利で、おそらく読みやすく(特にこれらの他の言語でコードする場合)、もちろん標準ではありません。 Objective Cの新しいバージョンでのみ利用可能です
NSDictionaryに既にキーがあるかどうかを確認する
目的c:
//this is the dictionary you start with.
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"name1", @"Sam",@"name2", @"Sanju",nil];
//check if the dictionary contains the key you are going to modify. In this example, @"Sam"
if (dict[@"name1"] != nil) {
//there is an entry for Key name1
}
else {
//There is no entry for name1
}