给定任何2D数组,例如
val in = Array( Array(59, 45, 32),
Array(20, 88, 5),
Array(49, 72, 89))
希望按第三列排序,以便
val out = Array( Array(20, 88, 5),
Array(59, 45, 32),
Array(49, 72, 89))
非常感谢。
答案 0 :(得分:7)
这应该可行,但如果您的数组大小小于3,则会失败:
scala> in.sortBy(_(2))
输出:
res0: Array[Array[Int]] = Array(Array(20, 88, 5), Array(59, 45, 32), Array(49, 72, 89))
你也可以这样做这个故障保护:
in.sortBy {
case arr @ Array(_) if arr.size >= 3 => arr(2)
case arr => Int.MaxValue // or any other value. Using MaxValue will make the invalid arrays be last ones
}
答案 1 :(得分:1)
in.sortWith(_(2) < _(2))
将使用数组的第三个元素对数组进行排序。
答案 2 :(得分:1)
如果您的数组是Array [Array [Int]],则只需使用yourArray.sortBy(_(3))
。 3是您的字段索引,您希望根据此列进行排序。
但是,如果您的数组不是Array [Array [Int]],则不能直接使用sortBy。您最好使用从scala.util.Sorting
这是我的代码。
import scala.util.Sorting
Sorting.quickSort(yourArray)(new Ordering[Array[String]] {
def compare(x: Array[String], y: Array[String]) = {
x(3) compare y(3)
}
})
我的数组是Array [Array [String]],x(3)是您要比较的一个字段。当然,如果您想要反向排序,只需使用y(3) compare x(3)
来替换x(3) compare y(3)
。
如果您的数组是其他类型,则只需使用您的类型替换Array[String]