def l2m[T](l: List[T]): Map[T,T] = l match {case x::x2::xs => Map(x -> x2) ++ l2m(xs) case _ => Map()}実行例:
scala> val l = List("a", "1", "b", "2") l: List[java.lang.String] = List(a, 1, b, 2) scala> def l2m[T](l: List[T]): Map[T,T] = l match {case x::x2::xs => Map(x -> x2) ++ l2m(xs) case _ => Map()} l2m: [T](List[T])Map[T,T] scala> l2m(l) res0: Map[java.lang.String,java.lang.String] = Map(a -> 1, b -> 2)
groupedメソッドを使えば再帰をしなくても定義できました。
返信削除def l2m[A](l: List[A]) = l.grouped(2).map(xs => (xs(0) -> xs(1))).toMap
また、私はList[(A,B)] -> Map[A,B] がしばしば必要になるのですが、これは単に _.toMap でできました。
2.8から追加されたtoMapは便利ですねー。自分もよく使います。
返信削除