2010年2月11日木曜日

[Scala] ListをMapに変換するコード

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
List("a", "1", "b", "2")をMap("a" -> "1", "b" -> "2")にする必要があって、ListをMapに変換するコードを再帰で書いてみた。
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)

2 件のコメント:

  1. 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. 2.8から追加されたtoMapは便利ですねー。自分もよく使います。

    返信削除