まえ別のブログで書いたのですが、こちらにも書いておきたかったのでメモっときます。 次のようなArrayの中にDictionaryがいくつか入っている構成のデータがあったとします。
( { name = "wicket"; id = 1; }, { name = "oyabunn"; id = 2; }, { name = "apple"; id = 3; }, )
ここから、id = 1 のdictionaryのデータを取り出す方法、 name = wicket のDictionaryを取り出す方法のお話です。
さて、まずid = 1 のDictionaryを取り出すときを考えてみます。 普通に考えて、id順に並んでいるようですからobjectAtIndex:関数を使って取り出すことができます。 では次に、name = wicket のデータを取り出す方法を考えてみてください。 一般的にはこう書くと思われます。
NSDictionary \*resultDic = nil; for(NSDictionary \*dic in array){ if([[dic objectForKey:@"name"] isEqualToString:@"wicket"] ){ resultsDic = [dic retain]; break; } }
しかし、この方法よりももっといい書き方があります。 それがvalueForKeyPathです
[array valueForKeyPath:@"name"];
とかくと
( "wicket", "oyabunn", "apple" )
が帰ってきます。 これを利用して
[[array valueForKeyPath:@"name"] indexOfObject:@"wicket"];
とすれば欲しいDictionaryのindexの値が、
[array objectAtIndex:[[array valueForKeyPath:@"name"] indexOfObject:@"wicket]];
とすれば欲しいDictionary自体が取得できます。 NSDictionaryやNSArrayを多用する人はvalueForKeyPath関数は結構便利なので一度調べてみるといいと思います。