我有一个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";
这是像这样构建的
凯尔|约翰逊德鲁|安德森
雅各布|彼得森
我需要它像这样结束
德鲁|安德森
凯尔|约翰逊雅各布|彼得森
答案 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了解这些方法的返回值