なんということ…
こういうのがあったとして、
val a = List(Map('id -> 1, 'name -> "hoge"), Map('id -> 2, 'name -> "fuga"), Map('id -> 3, 'name -> "bar"))
こういうのが取り出したい。
List(1, 2, 3)
キーidのリスト。
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 Member(id: Int, name: String)
val a = List(Member(1, "hoge"), Member(2, "fuga"), Member(3, "bar"))
a.foldLeft(List[Int]()){(l, m) => l :+ m.id }
a.map(_.id)
この書き方のほうが、List[Int]になってくれて、結構嬉しい。
まとめ
こうしたいときはこう…みたいなのは下の下の戦術であるので、いい加減点ではなく線で考えることを覚えたい。あとは、mapちゃんと使おう…