【问题标题】:Sorting issue with 2D array in JAVAJAVA中二维数组的排序问题
【发布时间】:2012-10-09 11:20:27
【问题描述】:

使用下面的代码,我尝试对二维数组进行排序

 int[][] d2 = {
           {4,5,1},
           {4,1,1},
           {1,7,1},
           {3,3,2},
           {1}
          };

        java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[0] - b[0];
            }
        });

我排序后显示数组

for (int r=0; r<d2.length; r++) {
            for (int c=0; c<d2[r].length; c++) {
                System.out.print(" " + d2[r][c]);
            }
            System.out.println("");
}

我得到的结果是这样的

 1 7 1
 1
 3 3 2
 4 5 1
 4 1 1

我希望结果两个是这样的

 1
 1 7 1
 3 3 2
 4 5 1
 4 1 1

要按照上述方式对数组进行排序,需要做什么?

我尝试将{1} 替换为{1,0,0},但即使对于{1,0,1},它仍然给出相同的结果。

【问题讨论】:

  • 您需要在比较器中添加更多条件(如果第一个元素相等,则返回数组长度的差异)。
  • 您只想比较第一个元素吗?
  • 我同意@nhahtdh,你需要修改你的比较方法来处理数组的长度。
  • @Sangeet Menon:您能否说明您不希望对具有相同第一个元素的数组进行排序?此外,了解您希望如何处理不同长度的数组也会很有帮助:仅按长度还是按其元素?
  • @SangeetMenon.. 请记住接受满足您需要的答案之一..

标签: java arrays multidimensional-array sorting comparator


【解决方案1】:

比较compare方法中传入数组的长度。如果a[]的长度小于b[],返回-1:-

    java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
                public int compare(int[] a, int[] b) {
                    if (a.length != b.length) {
                        return a.length < b.length ? -1 : 1;
                    }
                    return a[0] - b[0];
                }
            });

如果您想通过检查每个元素进行排序,我认为您应该这样做。将您的 compare 方法更改为:-

public int compare(int[] a, int[] b) {

    if (a.length == b.length) {
        for (int i = 0; i < a.length; i++) {
            if (a[i] == b[i]) {

            } else {
                return a[i] - b[i];
            }
        }
        return 0;

    } else {
        return a.length < b.length ? -1 : 1;
    }                       
}

【讨论】:

  • 我认为这不是 OP 想要的 - 您需要比较 a[i]-b[i] 直到达到数组的长度之一并将其他项目与 0 进行比较(我想)。
  • @assylias.. 可能是,但是当我看到 OP 的预期输出时,我虽然他只想要这个.. 你可以在那里看到.. 他没有比较所有元素..跨度>
  • @assylias 如何比较所有元素?
  • @assylias.. 编辑代码以考虑这两种情况.. OP 现在可以选择他想要的任何内容.. :)
  • @RohitJain OP 只是想对第一个元素进行排序,我猜。我的回答解释了 OP 获得结果的原因。
【解决方案2】:

在您的 Comperator 中,您仅使用第一个字段来比较 2 个数组。您必须包含所有字段才能比较它们,或者至少您必须检查数组的长度以获得所需的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多