libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

辞書と集合のクラス (2/7)

作成:2011-02-17 11:30
更新:2011-11-13 21:10

■辞書の内容を調べる

こうして作成されたNSDictionaryから値を取り出す場合は、取り出したい値のキーを引数にしてメソッドを呼び出します。
id 変数 = [《NSDictionary*》
        objectForKey:《id》];
objectForKey:の引数に、キーのオブジェクトを指定します。これで、そのキーの値が取り出されます。これは単純ですね。続いて、保管されているデータ数を得るメソッド。
NSUInteger 変数 = [《NSDictionary*》 count];
NSArrayにも同様のものがあったのでわかりますね。いくつデータが保管されているのかを返します。ただし、NSDictionaryはインデックス番号で要素を取り出せないので、これで要素数を調べて繰り返しを使って……なんて考えてはだめですよ。

もし、すべての要素を取り出して処理したければ、「全キーを配列として取り出す」「その配列の全要素を順に取り出し、そのキーで値を取り出す」というような手順を取る必要があるでしょう。
NSArray *変数 = [《NSDictionary*》 allKeys];
これが、すべてのキーをNSArrayとして取り出すためのメソッドです。同様に、すべての値をNSArrayで取り出すメソッドもあります。
NSArray *変数 = [《NSDictionary*》 allValues];
NSDictionaryは、要素の並び順は保証されていませんが、allKeysallValuesでとり出されるキーと値の順番は同じになっているようです。ただ、確実にキーと値をセットで取り出したいなら、allKeysでキーを取り、それを使って値を取り出すべきでしょう。

では、NSDictionaryに用意されている全データを取り出して処理する例を挙げておきましょう(下のリスト欄)。ここでは、dictionaryWithObjectsAndKeys:を使ってNSDictionaryを作成してみました。そこから、allkeysでキーのNSArrayを取得し、ここから高速列挙forを使って順にキーを取り出して、辞書から値を取得しています。

このように、辞書クラスは配列と違って数字を使って管理しないため、「全要素を操作する」というような作業はちょっと面倒くさいのです。それより、キーを使ってすばやく値を取り出す、文字通り「辞書的な使い方」が向いています。

※プログラムリストが表示されない場合

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プログラミング入門」に戻る