0

私のダオでは、_1 が一意ではなく、_2 が一意であるタプル [String,String] を受け取ります。これを取得するために_1に基づいてgroupByします-

val someCache : Map[String, List[(String, String)]]

Map のすべての値に対して _1 が繰り返されるため、これは明らかに無駄です。_2 はユニークなので、私が欲しいのは次のようなものです -

val someCache : Map[String, Set[String]]

つまり、_1 でグループ化し、キーとして使用し、対になった _2 を Set[String] 型の値として使用します。

4

2 に答える 2

1

簡単な解決策は、すべての要素をマップし、各リストをセットに変換することです。

someCache.map{ case (a, l) => a -> l.map{ _._2 }.toSet }

も使用できますmapValuesが、遅延コレクションを作成し、値へのアクセスごとに変換を実行することに注意してください。

于 2013-08-08T13:34:27.190 に答える
1
def foo(ts: Seq[(String, String)]): Map[String, Set[String]] = {
  ts.foldLeft(Map[String, Set[String]]()) { (agg, t) =>
    agg + (t._1 -> (agg.getOrElse(t._1, Set()) + t._2))
  }
}


scala> foo(List(("1","2"),("1","3"),("2","3")))
res4: Map[String,Set[String]] = Map(1 -> Set(2, 3), 2 -> Set(3))
于 2013-08-08T14:17:51.057 に答える