アプリ完成したらなんか「燃え尽きた・・・・」って感じでしばらく何もしていませんでした^^;
でも、今日からまた再開します!
今回のはNSArrayとかNSDictionaryを多用する人にお勧めな情報!
CoreDataとかSQLiteとか使うとどうしてもNSArrayとNSDictionaryを多用することになると思うので、
ほとんど全員が対象です(笑
で、NSArrayとNSDictionaryを多用するときって大抵が
NSArrayの中にNSDictionaryがたくさん入っている形だと思うんですよ
たとえばこんな感じでarrayっていうNSArrayオブジェクトにデータが入っている感じですね
(
{
name = "wicket";
id = 1;
},
{
name = "oyabunn";
id = 2;
},
{
name = "apple";
id = 3;
},
)
で、このなかでいきなりid=1のデータを取り出したい!って言うとき、皆さんどうしてます??
たぶん大抵の人がid順に並んでいると仮定してNSArrayの objectAtIndex 関数を使って取り出すんじゃないでしょうか?
この場合はそれで十分に正解です。
(IDが必ず連番であることは必須条件になりますが)
が、もしこれがname = "apple" の人を取り出したい!って言う場合ならどうします?
先ほどのように数値でもないし、nameの順で並んでいる訳ではないので難しいですよね?
for .. in 構文を使ってまわして、名前が一致したら....みたいなことを書かなければいけません
そんなときに便利なのが valueForKeyPath 関数!
この関数、NSArrayに使うとそのキーのものだけを一覧で取り出してくれます!
具体的にいってみましょう
[array valueForKeyPath:@"name"];
とやると、返り値は
(
"wicket",
"oyabunn",
"apple"
)
になります。
これを使えば
[[array valueForKeyPath:@"name"] indexOfObject:@"apple"];
で簡単にappleさんのデータが入ったIndex番号がわかっちゃいます!
[array objectAtIndex:[[array valueForKeyPath:@"name"] indexOfObject:@"apple"]];
とかけば1行でappleさんのデータが取れちゃうわけです
for...inなんて書いていたら確実に4行ぐらいいっちゃいますよね
それがたったの1行ですんじゃうんです!
プログラムの簡略化ってのはバグの発生率を下げますので、
こういった技術を使ってみてはどうでしょう?
注意)
[array objectAtIndex:[[array valueForKeyPath:@"name"] indexOfObject:@"apple"]]
のままでは、appleさんのデータがなかったときに例外が投げられてエラーで終了しちゃいます
ちゃんとappleさんのデータがあるかどうかをどこかで確認してくださいね^^;