Scalaでは2つのコレクションをまとめてループに回したい場合にzip
を使うと便利なことがある。
scala> val l1 = Seq(1, 3, 5)
l1: Seq[Int] = List(1, 3, 5)
scala> val l2 = Seq(2, 4, 6)
l2: Seq[Int] = List(2, 4, 6)
scala> for ((a, b) <- (l1 zip l2)) yield (a, b)
res0: Seq[(Int, Int)] = List((1,2), (3,4), (5,6))
でもzipだと2つのコレクションをまとめることしたできないので3つ以上をまとめたい場合はzippedを使う。
scala> val l3 = Seq("a", "b", "c")
l3: Seq[String] = List(a, b, c)
scala> for ((a, b, c) <- (l1, l2, l3).zipped) yield (a, b, c)
res1: Traversable[(Int, Int, String)] = List((1,2,a), (3,4,b), (5,6,c))