java - 使用java中的比较器对二维数组的每一列进行排序

标签 java arrays sorting multidimensional-array comparator

我使用带有自定义比较器的 Array.sort 方法对二维数组进行排序的工作表

String[] array=new String[]{
"a b c",
"a",
"a b",
"a c"};

我希望输出也如下所示

{"a",
 "a b",
 "a b c",
 "a c"}

比较器的比较方法如下所示

public int compare(String arg0, String arg1) {
    String[] tempArray0 = arg0.split(" +");
    String[] tempArray1 = arg1.split(" +");

if (!arg0.isEmpty() && !arg1.isEmpty())

    {
        return sortStrings(tempArray0[0], tempArray1[0]);
    }

sortStrings 方法如下所示

 private int sortStrings(String arg0, String arg1) {
    if (arg0.toLowerCase().compareTo(arg1) > 0) {
        return 1;
    } else if (arg0.toLowerCase().compareTo(arg1) < 0) {
        return -1;
    } else {
        return 0;
    }

}

如果您只想按第一列,那么这个问题很有效,但对我来说,有必要检查该列是否具有相同的值,它应该对下一列进行排序,依此类推。

我知道在这种情况下,我需要捕获 IndexOutOfBounds 异常,因为稍后划分为 2D 数组的数组中的一个具有不同大小的行。

我刚刚遇到了这个问题,因为我不知道这里使用什么样的循环结构

最佳答案

试试这个

String[][] array = new String[][] { { "a", "b", "c" }, { "a" }, { "a", "b" }, { "a", "c" } };

        Arrays.sort(array, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {

                for (int i = 0; i < o1.length; i++) {

                    if (o2.length == i) return 1;

                    int comp = o1[i].compareTo(o2[i]);

                    if (comp != 0)
                        return comp;   
                }                           
                return -1;
            }
        });

应该打印:

a
ab
abc
ac

关于java - 使用java中的比较器对二维数组的每一列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342135/

相关文章:

python - 使用 numpy 进行 3D 图像压缩

c# - List.Sort 在 C# : comparer being called with null object

java - 如何在arCore平面中设置3d模型而无需点击

java - java .class 文件在不同编译器、版本、依赖项之间的差异是什么?

java - GlassFish 4.1 部署在使用 JDK 8 的 eclipse Luna 上失败

java - 带有自定义 JAX-B 绑定(bind)的 JAX-WS MarshalException : Unable to marshal type "java.lang.String" as an element

arrays - Angular $save 并推送到数组项目后,除非我重新运行查询,否则不会添加

python - 设置 numpy 数组阈值的最快方法是什么?

linux - 如何在Linux中对以数字命名的子目录进行排序

algorithm - 什么是蛇类?