У меня есть 2D-массив, который я хочу отсортировать по второму столбцу.Первый столбец должен оставаться в паре со вторым столбцом.
Первоначально 2D-массив выглядит следующим образом (матрица 2x10):
0 10
1 9
2 9
3 9
4 15
5 10
6 4
7 8
8 11
9 12
Я хочу, чтобы вышеуказанный 2D-массив сортировался следующим образомthis:
4 15
9 12
8 11
0 10
5 10
1 9
2 9
3 9
7 8
6 4
Теперь я попытался адаптировать ответ из: Сортировать двумерный массив на основе одного столбца в этот код:
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);
}
});
Тем не менее, кажется, что не сортировать массив вообще.При печати массива после вызова функции sort () массив находится в своем первоначальном порядке.
Я также попытался адаптировать ответ отсюда: сортировка 2D-массива String в Java , но я столкнулсята же проблема.
Допустил ли я какую-то фатальную ошибку при адаптации этих решений, или мой код должен работать?
Кроме того, как мне будет сортировать этот массив по убыванию?Могу ли я заменить оператор return в compare () этой строкой?
return -numOfKeys2.compareTo(numOfKeys1);
Любая помощь будет принята с благодарностью.Спасибо!
РЕДАКТИРОВАТЬ: просто опубликовать оставшуюся часть моего кода, чтобы увидеть, если проблема в другом месте.
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]);
}
}
РЕДАКТИРОВАТЬ 2:
У меня это работает.Спасибо всем за вашу помощь.У меня было несколько функций Sort () (старая, которая не работала, и та, что вы видите выше), и оказалось, что я звонил не той, хотя я думал, что изменил вызов.Только один из тех дней.
Не стесняйтесь использовать приведенный выше код, если вы хотите отсортировать массив.Теперь он полностью работает.