3

これはおそらく Scala での非常に単純な List 操作であることはわかっていますが、私は初心者であり、理解できません。共通の ID でグループ化された一連の値を含む結果セットを返すクエリがあります。例えば:

結果セット:

[{ 1, "a", 30 },
{ 1, "b", 20 },
{ 1, "c", 22 },
{ 2, "a", 32 },
{ 2, "c", 10 }]

そして、私がやりたいのは、これを次のようにマップに入れることです:

1 -> [{"a", 30}, {"b", 20}, {"c", 22}]
2 -> [{"a", 32}, {"c", 10}]

これには collect メソッドを使用できると思いますが、わかりません。

4

1 に答える 1

11

データ構造の型が何であるかはわかりませんが、これを適応させることができるかもしれません。これは、タプルのコレクションがあることを前提としています。

val items = 
  List((1, "a", 30),
       (1, "b", 20),
       (1, "c", 22),
       (2, "a", 32),
       (2, "c", 10))

items
  .groupBy{ case (a,b,c) => a }
  .mapValues(_.map{ case (a,b,c) => (b,c) })

// Map(1 -> List((a,30), (b,20), (c,22)), 2 -> List((a,32), (c,10)))

または、より簡潔に:

items.groupBy(_._1).mapValues(_.map(t => (t._2, t._3)))

メソッドはまったく別のcollectものです (基本的に、map一致しない値をドロップします)。groupByメソッドは、あなたが本当に探していたものです。

于 2012-05-10T20:33:50.293 に答える