当前位置: 首页 > 知识库问答 >
问题:

使用用户定义的方法对二维数组进行排序

尚河
2023-03-14

我试图在不使用预定义方法或数组列表的情况下对2d数组进行排序

         String[][] data = new String[][] {
                new String[] {"bob","one"},
                new String[] {"jack","two",},
                new String[] {"adam","three"}
        };

我想把这个定为

{"adam","three"},
{"bob","one"},
{"jack","two"},

我尝试了很多方法,成功地订购了第一个元素,但添加第二个元素没有成功。我不张贴我的工作,因为它是不成功的任何建议将不胜感激

共有2个答案

陶琦
2023-03-14

如果您实际上是通过参考a-z之间字母的ASCII表值按字母顺序排序,则可以使用比较器来比较名称字符串。请注意小写字母及其值。字母“a”的值为97,“z”的值为122。如果使用比较器并比较名称的字符串,则只需确保将每个对象对(名称编号)放在列表中第一个对象之前或之后(bob,本例中为一个)。看看杰克,“字母j在b后面吗?”是的,放在鲍勃后面。这就是想法,这里有一个字符串比较器指南和一个从字符串中获取字符(您只需要第一个字符)。

隗嘉歆
2023-03-14

尝试使用比较器数组 排序

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        String[][] data = new String[][] {
            new String[] {"bob", "one"},
            new String[] {"jack", "two"},
            new String[] {"adam", "three"}
        };
        System.out.printf("Before: %s%n", Arrays.deepToString(data));
        Arrays.sort(data, Comparator.comparing(a -> a[0]));
        System.out.printf("After: %s%n", Arrays.deepToString(data));
    }
}

如果这是不允许的,这里有一个冒泡排序的实现,作为不使用预定义方法的示例(您可能想用更高效的排序算法来代替它):

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[][] data = new String[][] {
            new String[] {"bob", "one"},
            new String[] {"jack", "two"},
            new String[] {"adam", "three"}
        };
        System.out.printf("Before: %s%n", Arrays.deepToString(data));
        bubbleSortByFirstElement(data);
        System.out.printf("After: %s%n", Arrays.deepToString(data));
    }

    public static void bubbleSortByFirstElement(String[][] array) {
        boolean changed;
        do {
            changed = false;
            for (int a = 0; a < array.length - 1; a++) {
                if (array[a][0].compareTo(array[a + 1][0]) > 0) {
                    String[] tmp = array[a];
                    array[a] = array[a + 1];
                    array[a + 1] = tmp;
                    changed = true;
                }
            }
        } while (changed);
    }
}

两个示例的输出:

Before: [[bob, one], [jack, two], [adam, three]]
After: [[adam, three], [bob, one], [jack, two]]
 类似资料:
  • 按列对数组进行排序,就像我想在这里对最后一行上的值进行排序一样,根据排序结果,同一行中其他列上的数字也可能会发生变化 例如

  • 本文向大家介绍使用TreeMap在Java中对用户定义的对象进行排序,包括了使用TreeMap在Java中对用户定义的对象进行排序的使用技巧和注意事项,需要的朋友参考一下 要在Java中对用户定义的对象进行排序,代码如下- 示例 输出结果 名为Demo的类包含一个名为sort_objects的函数,该函数创建一个将整数和数组列表映射的哈希表。 它遍历这些值,并检查哪个是字符串,哪个是整数元素,并根

  • 本文向大家介绍PHP使用array_fill定义多维数组的方法,包括了PHP使用array_fill定义多维数组的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP使用array_fill定义多维数组的方法。分享给大家供大家参考。具体分析如下: PHP中可以用多个array_fill嵌套完成多维数组的定义: 可用如下语句进行填充: 结果为: 希望本文所述对大家的php程序设计有所帮

  • 本文向大家介绍C#使用linq对数组进行筛选排序的方法,包括了C#使用linq对数组进行筛选排序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用linq对数组进行筛选排序的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 尝试编写一个Python函数:def compare_lengths(x,y,z) 它接受三个数组作为参数,检查它们的长度,并按长度顺序将它们作为三个数组返回。 例如,如果函数接受[1,2,3]、[10,20,30,40]和[65,32,7]作为输入,则希望它返回([1,2,3]、[65,32,7]、[10,20,30,40])或([65,32,7]、[1,2,3]、[10,20,30,40])

  • 本文向大家介绍PHP使用array_multisort对多个数组或多维数组进行排序,包括了PHP使用array_multisort对多个数组或多维数组进行排序的使用技巧和注意事项,需要的朋友参考一下 PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。 关联(string)键名保持不变,但数字键名会被重新索引。 输入数组被当成一个表的列并以