2012-05-10 18 views
2

これはおそらくScalaでの非常に簡単なリスト操作だとわかっていますが、私は初心者です。私は、共通の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}] 

は、私が収集方法をするために使用することができると思います。例えばこれを理解することはできません。

答えて

10

あなたのデータ構造の型は何か分かりませんが、おそらくこれを適応させることができます。

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メソッドは、あなたが本当に探していたものです。

+0

私が探していたもの、感謝! – OutNSpace

関連する問題