按特定列排序Scala 2D数组

时间:2014-04-07 12:47:04

标签: arrays scala sorting matrix

给定任何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))

非常感谢。

3 个答案:

答案 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]