Java 我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将第一个[0]与第二个[0]进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]与second[1]进行比较,并
Java 我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将第一个[0]与第二个[0]进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]与second[1]进行比较,并,java,arrays,Java,Arrays,我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将第一个[0]与第二个[0]进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]与second[1]进行比较,并返回其他比较的结果。您需要首先了解这些“2D数组”在内存中的表示方式。然后你很快就会看到错误。我们可以像这样直接对2d数组排序吗?@minigeek取决于你的意思。不,这个答案不能用于任何类型的2D数组。@汤姆,你能进一步解释一下你的评论吗?据
我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将
第一个[0]
与第二个[0]
进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]
与second[1]
进行比较,并返回其他比较的结果。您需要首先了解这些“2D数组”在内存中的表示方式。然后你很快就会看到错误。我们可以像这样直接对2d数组排序吗?@minigeek取决于你的意思。不,这个答案不能用于任何类型的2D数组。@汤姆,你能进一步解释一下你的评论吗?据我所知,这适用于所有的2D数组。@ Sp打印机将工作,是的,但它不会考虑其他列比前两个。例如,如果您有一个3x3阵列。您的代码对前两列进行排序,但如果前两列的值相等,则第三列可能显示为“无序”。@Tom Ok so“不能用于任何类型的2D数组”表示“不会自动按无限个元素进行排序”。明白了。我们能像这样直接对2d数组排序吗?@minigeek取决于你的意思。不,这个答案不能用于任何类型的2D数组。@汤姆,你能进一步解释一下你的评论吗?据我所知,这适用于所有的2D数组。@ Sp打印机将工作,是的,但它不会考虑其他列比前两个。例如,如果您有一个3x3阵列。您的代码对前两列进行排序,但如果前两列的值相等,则第三列可能显示为“无序”。@Tom Ok so“不能用于任何类型的2D数组”表示“不会自动按无限个元素进行排序”。明白了。他不想独立地对两列进行排序,他想要的是按多个标准进行排序(先按第一列排序,然后按第二列排序)。现在的问题是如何解释OPs问题。您的答案断开了“左”和“右”的连接,但如果“左”相等,也可以保持连接并重新排序“右”。我想知道OP到底想要什么。@Tom是的,我想我可能误解了,我会把答案留给发起者,直到发起者评论这个答案没有坏处,但我会加强它,以显示您方法的不同结果。(即,在“右”列中具有不同值的起始数组ilke{Josef”,“up”},{Josef”,“region”},{“zeta”,“local”},{“zeta”,“cool”},{“root”,“doen”},{“root”,“bat”}
),所以OP(和其他)你可以看到你的方法会产生一个不同于卡雷格斯方法的结果。他不想独立地对两列进行排序,他想要的是按多个标准进行排序(先按第一列,后按第二列)。现在的问题是如何解释OPs问题。您的答案断开了“左”和“右”的连接,但如果“左”相等,也可以保持连接并重新排序“右”。我想知道OP到底想要什么。@Tom是的,我想我可能误解了,我会把答案留给发起者,直到发起者评论这个答案没有坏处,但我会加强它,以显示您方法的不同结果。(也就是说,有一个起始数组ilke{Josef”,“up”},{Josef”,“region”},{zeta”,“local”},{zeta”,“cool”},{root”,“doen”},{root”,“bat”}
,在“right”列中有不同的值),所以OP(和其他人)可以看出您的方法将产生与例如KarelGs方法不同的结果。
public class SortColl {
public static void main(String args[]){
String[][] multi = new String [][]{
{"Josef", "cool"},
{"Josef", "bat"},
{"zeta", "doen"},
{"zeta", "up"},
{"root", "local"},
{"root", "region"}
};
Arrays.sort(multi, new Comparator<String[]>(){
@Override
public int compare(String[] first, String[] second){
final String time1 = first[0];
final String time2 = second[0];
return time1.compareTo(time2);
}
});
for (int i=0; i< multi.length; i++){
String[] row = multi[i];
for(int j=0; j<row.length;j++){
System.out.println(" , " + row[j] );
}
}
}
{"Josef", "bat"},
{"Josef", "cool"},
{"root", "local"},
{"root", "region"}
{"zeta", "doen"},
{"zeta", "up"},
String[][] multi = new String [][]{
{"Josef", "cool"},
{"Josef", "bat"},
{"zeta", "doen"},
{"zeta", "up"},
{"root", "local"},
{"root", "region"}
};
String [] left = new String[multi.length];
for (int i = 0; i < multi.length; i++) {
left[i] = multi[i][0];
}
Arrays.sort(left);
String [] right = new String[multi.length];
for (int i = 0; i < multi.length; i++) {
right[i] = multi[i][1];
}
Arrays.sort(right);
for (int i = 0; i < multi.length; i++) {
multi[i][0] = left[i];
multi[i][1] = right[i];
}
private Comparator<String[]> byElement(int i) {
return Comparator.comparing(a -> a[i]);
}
Arrays.sort(multi, byElement(0).thenComparing(byElement(1)));
String[][] multi = new String [][]{
{"Josef", "cool"},
{"Josef", "bat"},
{"zeta", "doen"}
};
multi ----> [ ][ ][ ]
| | |
| | \->["zeta", "doen"]
| |
| \-> ["Josef"]["bat"]
|
\-> ["Josef"]["cool"]
first --> ["Josef"]["cool"]
second--> ["Josef"]["bat"]
Arrays.sort(multi, new Comparator<String[]>(){
@Override
public int compare(String[] first, String[] second){
// compare the first element
int comparedTo = first[0].compareTo(second[0]);
// if the first element is same (result is 0), compare the second element
if (comparedTo == 0) return first[1].compareTo(second[1]);
else return comparedTo;
}
});
Arrays.sort(multi, new Comparator<String[]>(){
@Override
public int compare(String[] first, String[] second){
final String time1 = first[0];
final String time2 = second[0];
int compare = time1.compareTo(time2);
if(compare != 0){
return compare;
}else{
return first[1].compareTo(second[1]);
}
}
});
Arrays.sort(multi, (first, second) -> {
final String time1 = first[0];
final String time2 = second[0];
int compare = time1.compareTo(time2);
if(compare != 0){
return compare;
}else{
return first[1].compareTo(second[1]);
}
})
Arrays.sort(multi, (a,b) -> a[0].compareTo(b[0]));