2017-05-02 3 views
1

の(インデックス値と一緒に)、最大N個の要素を取得します。私は、下図のようIntegersを含む配列を持っている:アレイ

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

私はこの配列の最大3つの要素を取得する必要があります(1つの機能または2つの別々の機能を使用して)対応するインデックスとともに表示されます。例えば

、出力のようなものかもしれません:操作はシンプルに見えるが、私は関連するすべての機能を周りに見つけることができませんでした

// 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))