【问题标题】:sorting a 2D double array对二维双精度数组进行排序
【发布时间】:2013-06-07 08:17:34
【问题描述】:

我尝试根据第一个值对二维双精度数组 (double[][]) 进行排序。 示例:{1.0226342823592962,0.0},{1.0395582845873155,1.0} 从最大的价值开始。 这是我使用的代码(java生成了一半)

java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {

        @Override
        public int compare(double[] o1, double[] o2) {
            // TODO Auto-generated method stub
            return 0;
        }


    });

但是我的 'indexMatrix' 之后没有改变。我认为这与公共 int 比较有关,因为这些值彼此如此接近,如果您将它们转换为 int,它们将全部为 1 并且无法排序。还是别的什么?

【问题讨论】:

  • 这是您的完整代码吗?如果是,则不会对其进行排序,因为您的 compare 方法总是返回 0,这意味着元素是相同的。

标签: java sorting matrix double


【解决方案1】:

为什么要将它们转换为整数?只需在您的排序方法中使用Double.compareTo(Double) 方法:

public static void main(String[] args) {

    double[][] indexMatrix = new double[][] {
                  new double[] { 1.02, 100 }, 
                  new double[] { 1.03, 123 },
                  new double[] { 1.01, 321 } };

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

    for (double[] d : indexMatrix)
        System.out.println(Arrays.toString(d));
}

输出:

[1.03, 123.0]
[1.02, 100.0]
[1.01, 321.0]

【讨论】:

    【解决方案2】:

    你必须实现 compare 方法,你所拥有的只是一个模板。它没有改变,因为默认返回 0 意味着比较的值相等。其他返回值为-1和+1,根据实际情况而定。

    【讨论】:

    • 返回值可能是正数或负数。我也可以返回-200 而不是-1
    • 是的,除了信号之外,对于实际值没有任何限制。
    • 确实,我忘了把代码放在那里。 (自动化代码不完整哈哈)
    【解决方案3】:

    不,您不会将双精度数转换为整数。 int 正是 compare() 期望的返回参数。如果o1o2 相等则返回0,如果o1 &lt; o2 则返回小于0 的值,如果o1 &gt; o2 则返回大于0 的值。 您可以为此使用Double.compare()

    java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {
        @Override
        public int compare(double[] o1, double[] o2) {
            // note that o2 comes first here to sort in descending order
            return Double.compare(o2[0], o1[0]);
        }
    });
    

    【讨论】:

      【解决方案4】:

      Java8+

      Arrays.sort(indexMatrix, (Double[] o1, Double[] o2) -> Double.compare(o1[0], o2[0]));
      

      【讨论】:

        猜你喜欢
        • 2017-01-04
        • 2016-11-22
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 2013-08-17
        • 2015-09-17
        相关资源
        最近更新 更多