まえ別のブログで書いたのですが、こちらにも書いておきたかったのでメモっときます。

次のようなArrayの中にDictionaryがいくつか入っている構成のデータがあったとします。
[plain]
(
{
name = "wicket";
id = 1;
},
{
name = "oyabunn";
id = 2;
},
{
name = "apple";
id = 3;
},
)
[/plain]

ここから、id = 1 のdictionaryのデータを取り出す方法、 name = wicket のDictionaryを取り出す方法のお話です。


さて、まずid = 1 のDictionaryを取り出すときを考えてみます。
普通に考えて、id順に並んでいるようですからobjectAtIndex:関数を使って取り出すことができます。

では次に、name = wicket のデータを取り出す方法を考えてみてください。

一般的にはこう書くと思われます。
[objc]
NSDictionary *resultDic = nil;
for(NSDictionary *dic in array){
if([[dic objectForKey:@"name"] isEqualToString:@"wicket"] ){
resultsDic = [dic retain];
break;
}
}
[/objc]

しかし、この方法よりももっといい書き方があります。

それがvalueForKeyPathです

[objc]
[array valueForKeyPath:@"name"];
[/objc]
とかくと
[plain]
(
"wicket",
"oyabunn",
"apple"
)
[/plain]
が帰ってきます。

これを利用して
[objc]
[[array valueForKeyPath:@"name"] indexOfObject:@"wicket"];
[/objc]
とすれば欲しいDictionaryのindexの値が、

[objc]
[array objectAtIndex:[[array valueForKeyPath:@"name"] indexOfObject:@"wicket]];[/objc]
とすれば欲しいDictionary自体が取得できます。

NSDictionaryやNSArrayを多用する人はvalueForKeyPath関数は結構便利なので一度調べてみるといいと思います。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>