Eas*_*sun 123
在scala 2.8中,有一个方法sortBy.这是一个简单的用例:
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>
Run Code Online (Sandbox Code Playgroud)
Mic*_*mer 23
您可以使用此代码:
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> v
res11: Array[(Char, Int)] = Array((b,1), (a,2))
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎Scala无法推断传递给的数组的类型stableSort.我希望你没关系.
如果是Array,则可能通常使用就地排序算法.但是,在惯用的Scala代码中,通常不鼓励/使用可变集合.如果是这种情况并且您具有不可变集合(或者不希望Array在适当的位置进行修改),请使用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> a
res7: Array[Int] = Array(1, 3, 2, 5)
Run Code Online (Sandbox Code Playgroud)
排序Array元组或任何其他元组集合:
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> a
res5: Array[(Char, Int)] = Array((a,1), (b,4), (c,5), (d,2))
Run Code Online (Sandbox Code Playgroud)