2016-04-01 7 views
1

私は解決しなければならない問題に遭遇しました。タプルのリストの値であるVALUEで(KEY、VALUE)をソートする方法は?

[String, ((Int, String), (Int, String), ... , ...)] 

私は(キーが文字列の文字と値は、私が解析していた情報に応じて、タプルまたはタプルのリスト、可能である)、このようなキーと値を出力する関数を持っています

これは、出力がKEYストリング文字( "134; 4; 001; 2")であり、その値が3つのタプルのリストである場合があります。

["134;4;001;2", ((2, "String 1") ,(4, "String 2"), (16, "String 23"))] 

私が今必要とするのは、最初の位置にある最高のint番号を残して値をソートする方法です。

したがって、出力は次のようになりますよう、私が必要となるのか:

["134;4;001;2", ((16, "String 23"), (4, "String 2"), (2, "String 1"))] 
+1

あなたの質問を修正する必要があります。あまりにもあいまいです。私の提案は、入力サンプルと目的の出力サンプルを追加することです。 –

+0

私はあまりあいまいではないことを願っています!ありがとう! – Ewik

+0

"このようなタプル:[String、(...)]"これは正確にタプルですか?あなたはそれをリストにする括弧表記を使用しました。また、リストの2番目の要素を丸括弧で囲んでTuple2のようにしますが、この例では2つではなく3つの要素を入れます。私は完全に失われている、私の答えを削除し、質問が適切に尋ねられた場合は再び投稿します。 – slouc

答えて

0

を私は仮定している:

  • 第二の要素には、常にTuple3(正確に3組のもう一つのタプル)です
  • 2番目の要素がタプルのタプルである結果をタプルにしたい場合

Givこれはすべてそうです:

val input = ("134;4;001;2" ,((2, "String 1") ,(4, "String 2"), (16, "String 3"))) 

type T = (Int, String) // just to make things shorter... 

// turn tuple-of-tuples to list, and reverse-sort list by first element 
val tupleWithList: (String, List[(Int, String)]) = input match { 
    case (header, (t1: T, t2: T, t3: T)) => (header, List(t1, t2, t3).sortBy { case (i, s) => -i }) 
} 

// if you want the result to contain a tuple-of-tuples again (instead of a list): 
val result = tupleWithList match { 
    case (header: String, List(t1: T, t2: T, t3: T)) => (header, (t1, t2, t3)) 
} 

println(result) 
// prints: (134;4;001;2,((16,String 3),(4,String 2),(2,String 1))) 
関連する問題