§1 Objective-Cの連想配列(ディクショナリ)
配列には、インデックスを使って値を管理する「通常配列」と、一意のキーワードを使って値を管理する「連想配列」があります。
Objective-Cでは通常配列を扱う場合はNSArrayクラスとNSMutableArrayクラスを使用しますが、連想配列を扱う場合はNSDictionaryクラスとNSMutableDictionaryクラスを使用します。また、Objective-Cでは連想配列のことを「ディクショナリ」と呼びます。
NSDictionaryクラスは配列の内容が変更できないのに対してNSMutableDictionaryクラスは配列の内容を変更することができます。
[NSDictionaryクラスの使用方法]
●値とキーをセット(値, キー, 値, キー…)で指定してディクショナリを生成する
dictionaryWithObjectsAndKeysメソッドにて値とキーのセットをカンマ区切りで指定しています。Objective-Cの配列・ディクショナリにはオブジェクトしかセットできないため、以下では数値をNSNumberのオブジェクトを作ってセットしています。
1 2 |
NSDictionary *dictArray = [NSDictionary dictionaryWithObjectsAndKeys:@"太郎", @"name", [NSNumber numberWithInt:100], @"idNumber", nil]; |
●値とキーの配列を、それぞれ生成し、それを引数に指定してディクショナリを生成する
値の配列とキーの配列を生成し、それぞれの配列をdictionaryWithObjects:forKeysメソッドに指定しています。
1 2 3 |
NSArray *valArray = [NSArray arrayWithObjects:@"太郎", [NSNumber numberWithInt:100], nil]; NSArray *keyArray = [NSArray arrayWithObjects:@"name", @"idNumber", nil]; NSDictionary *dictArray = [NSDictionary dictionaryWithObjects:vals forKeys:keys]; |
●キーを指定してディクショナリの要素を取り出す
1 2 |
objectForKeyメソッドにキーを指定して値を取り出しています。 id obj = [dictArray objectForKey:@"name"]; |
●ディクショナリの要素数を取得する
countメソッドによりディクショナリの要素数を取得することができます。
1 |
int dictCount = [dictArray count]; |
●2つのディクショナリを比較する
isEqualToDictionaryメソッドにディクショナリを渡して、2つのディクショナリの中身が同一かどうかを判定しています。キーと値の組み合わせがすべて一致していれば同一となります。結果はtrueまたはfalseが返ります。
1 |
BOOL isDictEqual = [dictArray1 isEqualToDictionary:dictArray2]; |
[NSMutableDictionary クラスの使用方法]
NSMutableDictionaryはNSDictionaryのサブクラスなので、ディクショナリの生成、ディクショナリ要素数の取得、ディクショナリ要素の取り出しなどの基本的な処理はすべてNSDictionaryのメソッドを使うことができます。NSArrayに対するNSMutableArrayと同様です。
●値とキーをセット(値, キー, 値, キー……)で指定して可変のディクショナリを生成する
1 2 |
NSMutableDictionary *mtDictArray = [NSDictionary dictionaryWithObjectsAndKeys:@"太郎", @"name", [NSNumber numberWithInt:100], @"idNumber", nil]; |
●値とキーの配列を、それぞれ生成し、それを引数に指定して可変のディクショナリを生成する
1 2 3 |
NSArray *valArray = [NSArray arrayWithObjects:@"太郎", [NSNumber numberWithInt:100], nil]; NSArray *keyArray = [NSArray arrayWithObjects:@"name", @"idNumber", nil]; NSMutableDictionary *mtDictArray = [NSDictionary dictionaryWithObjects:vals forKeys:keys]; |
●キーを指定してディクショナリの要素を取り出す
1 |
id obj = [mtDictArray objectForKey:@"name"]; |
●ディクショナリの要素数を取得する
1 |
int mtDictCount = [mtDictArray count]; |
●空の可変ディクショナリを生成する
1 |
NSMutableDictionary *mtDictArray = [NSMutableDictionary dictionary]; |
●ディクショナリの要素をセットする
setObject:forKey:メソッドでキーを指定してオブジェクトをセットしています。新規に追加する場合、既存のキーの値を変更する場合もこのメソッドを使用します。
1 2 |
[mtDictArray setObject:@"太郎" forKey:@"name"]; [mtDictArray setObject:[NSNumber numberWithInt:100] forKey:@"idNumber"]; |
●ディクショナリの要素を削除する
removeObjectForKeyメソッドにてディクショナリの要素を削除しています。キーを一つ指定するか、キーの配列を指定する方法があります。
1 2 |
[mtDictArray removeObjectForKey:@"idNumber"]; [mtDictArray removeObjectsForKeys:[NSArray arrayWithObjects:@"name", @"idNumber", nil]]; |
removeAllObjectsメソッドを使用すると全ての要素を削除することができます。
1 |
[mtDictArray removeAllObjects]; |
●ディクショナリから要素を追加する
addEntriesFromDictionaryメソッドにて別のディクショナリから要素を追加しています。2つのディクショナリに同一のキーが存在した場合、追加するほうのディクショナリ要素で上書きされます。
1 |
[mtDictArray addEntriesFromDictionary:mtDictArray2]; |
Objective-C 基礎 目次
以下の記事も参考にして頂ければと思います。
「Objective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成」
「Objective-C 基礎(2)- Objective-Cの概要とメソッドの呼び出し」
「Objective-C 基礎(3)- クラス定義の方法」
「Objective-C 基礎(4)- クラスの使い方」
「Objective-C 基礎(5)- クラスメソッドとインスタンスメソッド」
「Objective-C 基礎(6)- 変数のスコープとプロパティ」
「Objective-C 基礎(7)- 変数のデータ型」
「Objective-C 基礎(8)- 文字列とNSStringクラス」
「Objective-C 基礎(9)- 可変文字列とNSMutableStringクラス」
「Objective-C 基礎(10)- Objective-Cの配列」
「Objective-C 基礎(11)- Objective-Cの連想配列」
「Objective-C 基礎(12)- ループ処理」
「Objective-C 基礎(13)- プロトコル」