Scala: how can I sort an array of tuples by their second element? Scala: how can I sort an array of tuples by their second element? arrays arrays

Scala: how can I sort an array of tuples by their second element?


In scala 2.8, there is a method sortBy. Here is a simple use case:

scala> val arr = Array(("One",1),("Two",2),("Four",4),("Three",3))arr: Array[(java.lang.String, Int)] = Array((One,1), (Two,2), (Four,4), (Three,3))scala> arr.sortBy(_._2)res0: Array[(java.lang.String, Int)] = Array((One,1), (Two,2), (Three,3), (Four,4))scala>


You can use this code:

scala> val v = Array(('a', 2), ('b', 1))v: Array[(Char, Int)] = Array((a,2), (b,1))scala> scala.util.Sorting.stableSort(v,     | (e1: (Char, Int), e2: (Char, Int)) => e1._2 < e2._2)scala> vres11: Array[(Char, Int)] = Array((b,1), (a,2))

Unfortunetly, it seems that Scala cannot infer the type of the array passed to stableSort. I hope that's ok for you.


If it's an Array, it's probably typical to use in-place sorting algorithms. However, in idiomatic Scala code, mutable collections are usually not encouraged/used. If that's the case and you have am immutable collection (or would like to not modify the Array in place), use sortWith:

scala> val a = Array(1, 3, 2, 5)a: Array[Int] = Array(1, 3, 2, 5)scala> a.sortWith(_ > _)res6: Array[Int] = Array(5, 3, 2, 1)scala> ares7: Array[Int] = Array(1, 3, 2, 5)

sorting an Array or any other collection of tuples:

scala> val a = Array(('a', 1), ('b', 4), ('c', 5), ('d', 2))a: Array[(Char, Int)] = Array((a,1), (b,4), (c,5), (d,2))scala> a.sortWith(_._2 > _._2)res4: Array[(Char, Int)] = Array((c,5), (b,4), (d,2), (a,1))scala> ares5: Array[(Char, Int)] = Array((a,1), (b,4), (c,5), (d,2))