0

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

我试过使用 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";

这是这样构建的

凯尔 | 约翰逊

德鲁 | 安德森

雅各布| 彼得森

我需要它像这样结束

德鲁 | 安德森

凯尔 | 约翰逊

雅各布| 彼得森

4

2 回答 2

1

这是一个对二维数组进行排序的简单方法。传入用于排序的索引作为第二个参数。在您的情况下,它将为 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;

    }
于 2012-02-15T06:57:40.450 回答
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 & String.compareToIgnoreCase了解这些方法的返回值

于 2012-02-15T06:31:39.307 回答