在java中按字母顺序排列二维数组

时间:2012-02-15 05:45:03

标签: java arrays sorting multidimensional-array alphabetized

我有一个2d数组,其中包含每行的名字,姓氏和第三个不相关的数据。我需要根据姓氏按字母顺序排列每一行。我怎么能做到这一点?

我尝试过使用java.util.Arrays.sort(array [0]);但我只能把它排成一行或一列。我需要将名字和姓氏保持在一起,并按姓氏排序。

所以说我有这个数组

String array [][]=new String[3][2];
       array[0][0]="Kyle";
       array[0][1]="Johnson";
       array[1][0]="Drew";
       array[1][1]="Anderson";
       array[2][0]="Jacob";
       array[2][1]="Peterson";

这是像这样构建的

凯尔|约翰逊

德鲁|安德森

雅各布|彼得森

我需要它像这样结束

德鲁|安德森

凯尔|约翰逊

雅各布|彼得森

2 个答案:

答案 0 :(得分:1)

这是一个对2D数组进行排序的简单方法。 传入索引以用于排序作为第二个参数。 在您的情况下,它将为1,因为姓氏的索引为1。

为简洁起见,我省略了NULL检查。

public static String[][] sort(String[][] array, final int sortIndex) {


        if (array.length < 2) {
            return array;
        }


        Arrays.sort(array, new Comparator<String[]>() {

            public int compare(String[] o1, String[] o2) {
                return o1[sortIndex].compareToIgnoreCase(o2[sortIndex]);
            }
        });

        return array;

    }

答案 1 :(得分:0)

您可以使用String.compareTo(String)来获取2个字符串的字典顺序,并制定您自己的函数来执行此操作。 规则很简单(伪代码):

be [s1,d1] // i.e s1 = Kyle, d1 = Johnson
be [s2,d2]
if (s1 < s2)  // means "Does s1 should come before s2 lexicographically" ie. s1.compareTo(s2) 
    [s1,d1] < [s2,d2]
else if (s1 > s2)
    [s2,d2] < [s1,d1]
else
    if (d1 < d2)
      etc...

String.compareTo&amp; String.compareToIgnoreCase了解这些方法的返回值