辞書と集合のクラス (2/7)
作成:2011-02-17 11:30
更新:2011-11-13 21:10
更新:2011-11-13 21:10
■辞書の内容を調べる
こうして作成されたNSDictionaryから値を取り出す場合は、取り出したい値のキーを引数にしてメソッドを呼び出します。
もし、すべての要素を取り出して処理したければ、「全キーを配列として取り出す」「その配列の全要素を順に取り出し、そのキーで値を取り出す」というような手順を取る必要があるでしょう。
では、NSDictionaryに用意されている全データを取り出して処理する例を挙げておきましょう(下のリスト欄)。ここでは、dictionaryWithObjectsAndKeys:を使ってNSDictionaryを作成してみました。そこから、allkeysでキーのNSArrayを取得し、ここから高速列挙のforを使って順にキーを取り出して、辞書から値を取得しています。
このように、辞書クラスは配列と違って数字を使って管理しないため、「全要素を操作する」というような作業はちょっと面倒くさいのです。それより、キーを使ってすばやく値を取り出す、文字通り「辞書的な使い方」が向いています。
id 変数 = [《NSDictionary*》objectForKey:の引数に、キーのオブジェクトを指定します。これで、そのキーの値が取り出されます。これは単純ですね。続いて、保管されているデータ数を得るメソッド。
objectForKey:《id》];
NSUInteger 変数 = [《NSDictionary*》 count];NSArrayにも同様のものがあったのでわかりますね。いくつデータが保管されているのかを返します。ただし、NSDictionaryはインデックス番号で要素を取り出せないので、これで要素数を調べて繰り返しを使って……なんて考えてはだめですよ。
もし、すべての要素を取り出して処理したければ、「全キーを配列として取り出す」「その配列の全要素を順に取り出し、そのキーで値を取り出す」というような手順を取る必要があるでしょう。
NSArray *変数 = [《NSDictionary*》 allKeys];これが、すべてのキーをNSArrayとして取り出すためのメソッドです。同様に、すべての値をNSArrayで取り出すメソッドもあります。
NSArray *変数 = [《NSDictionary*》 allValues];NSDictionaryは、要素の並び順は保証されていませんが、allKeysとallValuesでとり出されるキーと値の順番は同じになっているようです。ただ、確実にキーと値をセットで取り出したいなら、allKeysでキーを取り、それを使って値を取り出すべきでしょう。
では、NSDictionaryに用意されている全データを取り出して処理する例を挙げておきましょう(下のリスト欄)。ここでは、dictionaryWithObjectsAndKeys:を使ってNSDictionaryを作成してみました。そこから、allkeysでキーのNSArrayを取得し、ここから高速列挙のforを使って順にキーを取り出して、辞書から値を取得しています。
このように、辞書クラスは配列と違って数字を使って管理しないため、「全要素を操作する」というような作業はちょっと面倒くさいのです。それより、キーを使ってすばやく値を取り出す、文字通り「辞書的な使い方」が向いています。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSDictionary* dic = [NSDictionary
dictionaryWithObjectsAndKeys:
@"090-9999-9999",@"tuyano",
@"03-555-5555",@"taro",
@"080-765-4321",@"hanako",nil];
NSArray* keys = [dic allKeys];
id obj;
for (obj in keys){
id val = [dic objectForKey:obj];
NSLog(@"%@: %@",obj,val);
}
}
return 0;
}
※関連コンテンツ
「初心者のためのObjective-Cプログラミング入門」に戻る