0

我想这是一个常见问题,但我查看了其他一些回复,但无法让我的代码正常工作。

我有一个由双精度数组成的二维数组,两列和一堆行,我想按第一列升序对数组进行排序。

我的数组称为 ratio[][],我尝试了以下代码:

  Arrays.sort(ratio, new Comparator<double[]>() {

    @Override
    public double compare(double[] o1, double[] o2) {
        return valueOf(o1[0]).compareTo(valueOf(o2[0]));
    }

  });

编译器发现一堆错误。我已经导入了 java.util.Arrays 和 java.util.Comparator。我究竟做错了什么?

4

3 回答 3

3

如果您想通过第一个元素定义双精度数组的顺序(这似乎是您想要做的),那么您需要做的就是:

Arrays.sort(ratio, new Comparator<double[]>() {
    @Override
    public double compare(double[] o1, double[] o2) {
        return Double.compare(o1[0], o2[0]);
    }
});

无需Double为每个比较构造一个对象(或将您的数组转换为 type Double[])。

于 2012-10-30T05:20:12.350 回答
2

valueOfDouble类的静态方法。应该在其上调用它。

如果您只是根据每个数组对二维数组进行排序first column,它将是这样的:-

Arrays.sort(ratio, new Comparator<double[]>() {
        @Override
        public int compare(double[] o1, double[] o2) {
            return Double.valueOf(o1[0]).compareTo(Double.valueOf(o2[0]));
        }
});

而且,您可以使用Comparatoron 类型double[],因为 anarrayobject唯一的。因此,您无需将其转换为Double[][].

更新: -

  • 您也可以使用Double.compare(double, double)@Ted 答案中的方法,因为这不需要您创建两个双重对象。但是,这在小规模上并不重要,如果您正在构建一个有很多比较的大型应用程序,那么您绝对应该使用这个。
于 2012-10-30T05:14:44.923 回答
0

只是一个建议。。

  class Row {
      public double one;
      public double two;
  }  

  Row[] rows = // create this

  Arrays.sort(rows, new Comparator<Row>() {
      public int compare(Row o1, Row o2) {
          double c = o1.one - o2.one;
          return c < 0.0 ? -1 : c > 0.0 ? 1 : 0;
      }
  }
于 2012-10-30T05:21:47.747 回答