by shigemk2

当面は技術的なことしか書かない

zipとかtoMapとか

zipで作ったタプルリストでtoMapするなど。

scala> val a = List("hoge", "fuga", "bar")
a: List[String] = List(hoge, fuga, bar)

scala> val b = List("1", "2", "3")
b: List[String] = List(1, 2, 3)

scala> a zip b
res0: List[(String, String)] = List((hoge,1), (fuga,2), (bar,3))

scala> a zip b toMap
warning: there was one feature warning; re-run with -feature for details
res1: scala.collection.immutable.Map[String,String] = Map(hoge -> 1, fuga -> 2, bar -> 3)

scala> List('a,'b,'c).zipWithIndex
res2: List[(Symbol, Int)] = List(('a,0), ('b,1), ('c,2))

scala> List('a,'b,'c).zipWithIndex toMap
warning: there was one feature warning; re-run with -feature for details
res3: scala.collection.immutable.Map[Symbol,Int] = Map('a -> 0, 'b -> 1, 'c -> 2)

Scalaコレクションメソッドメモ(Hishidama's Scala collection method Memo)

Mapから指定した順番に値を取り出す。

こういうMapがあるとするじゃろ?

val m = Map("fuga" -> "2", "bar" -> "3", "hoge" -> "1")

このMapの値を、hoge fuga barの順番に取り出したい。

まあ、こんな感じっす。 Seq dからmapでdの値をキーとしてmの値をgetし、あったらその値を、なかったら""とか0とかを返す、みたいな感じ。

scala> val m = Map("fuga" -> "2", "bar" -> "3", "hoge" -> "1")
m: scala.collection.immutable.Map[String,String] = Map(fuga -> 2, bar -> 3, hoge -> 1)

scala> val d = Seq("hoge", "fuga", "bar")
d: Seq[String] = List(hoge, fuga, bar)

scala> d.map(m.get(_).getOrElse(""))
res1: Seq[String] = List(1, 2, 3)

scala> d.map(m.get(_).getOrElse("")).mkString(",")
res2: String = 1,2,3