Dra*_*ake 5 java arrays sorting
我有一个2D数组,我想根据第二列进行排序.第一列应保持与第二列配对.
2D阵列最初如下(2x10矩阵):
0 10
1 9
2 9
3 9
4 15
5 10
6 4
7 8
8 11
9 12
Run Code Online (Sandbox Code Playgroud)
我希望上面的2D数组像这样排序:
4 15
9 12
8 11
0 10
5 10
1 9
2 9
3 9
7 8
6 4
Run Code Online (Sandbox Code Playgroud)
现在,我尝试调整答案:将基于一列的二维数组排序到此代码中:
Arrays.sort(theArray, new Comparator<Integer[]>()
{
@Override
public int compare(Integer[] int1, Integer[] int2)
{
Integer numOfKeys1 = int1[1];
Integer numOfKeys2 = int2[1];
return numOfKeys1.compareTo(numOfKeys2);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,它似乎根本不对数组进行排序.在调用sort()函数后打印数组时,数组的初始顺序.
我也尝试从这里调整答案:在java中排序字符串的2D数组,但我遇到了同样的问题.
在调整这些解决方案时,我是否犯了一些致命错误,或者我的代码是否有效?
另外,我将如何按降序排序此数组?我会将compare()中的return语句替换为此行吗?
return -numOfKeys2.compareTo(numOfKeys1);
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.谢谢!
编辑:只需发布我的其余代码,看看问题是否在其他地方.
public void Sort()
{
Integer[][] theArray = {{0,10},{1,9},{2,9},{3,9},{4,15},{5,10},{6,4},{7,8},{8,11},{9,12}};;
dump(theArray);
Arrays.sort(theArray, new Comparator<Integer[]>()
{
@Override
public int compare(Integer[] int1, Integer[] int2)
{
Integer numOfKeys1 = int1[1];
Integer numOfKeys2 = int2[1];
return numOfKeys1.compareTo(numOfKeys2);
}
});
System.out.println("====");
dump(theArray);
}
public void dump(Integer[][] array)
{
for(int p = 0, q = 10; p < q; p++)
{
System.out.println(array[p][0] + " " + array[p][1]);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
我有它的工作.谢谢大家的帮助.我有多个Sort()函数(一个不起作用的旧函数,以及你上面看到的函数),但事实证明我调用了错误函数,即使我认为我改变了调用.只是其中一天.
如果要对数组进行排序,请随意使用上面的代码.它现在完全正常工作.
这对我来说可以。要颠倒顺序,您需要否定原始变量compareTo,或交换变量,但不能同时执行两者。
我们可能需要查看其余的代码才能理解为什么您会看到您所看到的内容;我逐字剪切并粘贴了您的代码,因此问题很可能出在其他地方。
dump(theArray);
Arrays.sort(theArray, new Comparator<Integer[]>() {
public int compare(Integer[] int1, Integer[] int2) {
Integer numOfKeys1 = int1[1];
Integer numOfKeys2 = int2[1];
return numOfKeys1.compareTo(numOfKeys2);
}
});
System.out.println("================");
dump(theArray);
0 10
0 10
1 9
2 9
3 9
4 15
5 10
6 4
7 8
8 11
9 12
================
6 4
7 8
1 9
2 9
3 9
0 10
0 10
5 10
8 11
9 12
4 15
Run Code Online (Sandbox Code Playgroud)