1. ホーム
  2. scala

[解決済み] タプルのリストをマップに変換する (重複するキーに対処する?)

2023-02-19 18:43:05

質問

私は、重複するキーを持つタプルのリストを変換する良い方法について考えていました。 [("a","b"),("c","d"),("a","f")] をマップに変換する方法を考えていました。 ("a" -> ["b", "f"], "c" -> ["d"]) . 通常(pythonで)、私は空のマップを作成し、リスト上でforループを行い、重複するキーをチェックします。しかし、私はここで何かもっとスカラ的で巧妙な解決策を探しています。

btw、私がここで使用するキー-バリューの実際のタイプは、次のとおりです。 (Int, Node) のマップにしたいのですが (Int -> NodeSeq)

どのように解決するのですか?

グループ化してから、プロジェクト化する。

scala> val x = List("a" -> "b", "c" -> "d", "a" -> "f")
//x: List[(java.lang.String, java.lang.String)] = List((a,b), (c,d), (a,f))
scala> x.groupBy(_._1).map { case (k,v) => (k,v.map(_._2))}
//res1: scala.collection.immutable.Map[java.lang.String,List[java.lang.String]] = Map(c -> List(d), a -> List(b, f))

fold をもっとスケーラブルに使う方法。 そこで (スキップ map f のステップをスキップします)。