2015-04-23 33 views
0

我有對的數組:排序Scala中,首先由值,然後通過鍵

Array(("hello",200.00),("name",100.00),("a",200.00),("say",150.67)) 

我希望它分類爲:在第一按值降序

Array(("a",200.00),("hello",200.00),("say",150.67),("name",100.00)) 

排序,然後按升序關鍵

+1

那你試試這麼遠嗎? – Mysterion

+0

我正在製作一個火花簇。所以我用sortBy命令,但這種排序只有關鍵或值 – Matt

+0

那麼......那麼爲什麼你使用陣列。如果您希望Spark使用RDD的任何好處。向我們展示代碼,然後可能是我們可以提供幫助。 –

回答

2

這麼簡單

array sortBy {case (k,v) => (-v,k)} 
0

嘗試使用sortWith:

val a = Array(("hello",200.00),("name",100.00),("a",200.00),("say",150.67)) 
val sorted = a.sortWith((a, b) => a._2 > b._2 || (a._2 == b._2 && a._1 < b._1)) 
0

您可以按價值 - >排序它 - >映射每個分組,以通過鍵SEQ排序 - >反向所有SEQ

val groupdByValue = a.groupBy { case (k, v) => v }.toSeq 
val groupsSortedByValue = groupdByValue.sortBy { case (value, group) => value } 
val sortedByValueThenKey = groupsSortedByValue.flatMap { case (k, v) => v.sortBy { case (k, v) => v } }.reverse 

sortedByValueThenKey:序號[(字符串,雙)] = ArrayBuffer((A, 200.0),(你好,200.0),(比如,150.67),(姓名,100.0))

相關問題