なんということ…
こういうのがあったとして、
val a = List(Map('id -> 1, 'name -> "hoge"), Map('id -> 2, 'name -> "fuga"), Map('id -> 3, 'name -> "bar"))
こういうのが取り出したい。
List(1, 2, 3)
キーidのリスト。
Mapを使うやつ。
// Mapを使う val a = List(Map('id -> 1, 'name -> "hoge"), Map('id -> 2, 'name -> "fuga"), Map('id -> 3, 'name -> "bar")) // あんまり賢くない書き方 val l: List[Any] = List() a.foldLeft(l){(l, m) => l :+ m.apply('id) } // わりと良い書き方 a.map(_.apply(id))
とちゅうで思ったけど、Map[Symbol, Any]ってあんまりいけてない。。特にAnyが。idの値はIntじゃないか。なんでAnyになるんですか。
というわけで、case classを使いたい
// case classを使う case class Member(id: Int, name: String) val a = List(Member(1, "hoge"), Member(2, "fuga"), Member(3, "bar")) // あんまり(ry a.foldLeft(List[Int]()){(l, m) => l :+ m.id } // 割と良い書き方 a.map(_.id)
この書き方のほうが、List[Int]になってくれて、結構嬉しい。
まとめ
こうしたいときはこう…みたいなのは下の下の戦術であるので、いい加減点ではなく線で考えることを覚えたい。あとは、mapちゃんと使おう…
- 作者: 丸尾末広
- 出版社/メーカー: KADOKAWA / エンターブレイン
- 発売日: 2014/04/10
- メディア: Kindle版
- この商品を含むブログを見る