2017-05-02 73 views
1

我有一個包含Integers數組(與他們一起索引),如下所示:得到最大的N個元素的數組

val my_array = Array(10, 20, 6, 31, 0, 2, -2) 

我需要得到這個數組的最大3種元素以及相應的指數(使用單個函數或兩個單獨的函數)。

例如,輸出可能是這樣的:

// max values 
Array(31, 20, 10) 

// max indices 
Array(3, 1, 0) 

雖然操作看似簡單,我是不是可以到處找到任何相關的功能。

回答

3

這裏有一個簡單的方法 - zipWithIndex其次排序:

val (values, indices) = my_array 
    .zipWithIndex  // add indices 
    .sortBy(t => -t._1) // sort by values (descending) 
    .take(3)   // take first 3 
    .unzip    // "unzip" the array-of-tuples into tuple-of-arrays 
1

這裏是另一種方式來做到這一點:

(my_array zip Stream.from(0)). 
    sortWith(_._1 > _._1). 
    take(3) 

res1: Array[(Int, Int)] = Array((31,3), (20,1), (10,0)) 
相關問題