Tengo una matriz 2D que quiero ordenar según la segunda columna. La primera columna debe permanecer emparejada con la segunda columna.Ordenar una matriz de enteros 2D basada en una columna
El 2D-array es inicialmente como sigue (2x10 matriz):
0 10
1 9
2 9
3 9
4 15
5 10
6 4
7 8
8 11
9 12
Quiero lo anterior 2D-array a clasificar como esto:
4 15
9 12
8 11
0 10
5 10
1 9
2 9
3 9
7 8
6 4
Ahora, he intentado la adaptación de la respuesta de: Sort a two dimensional array based on one column en este código:
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);
}
});
sin embargo, no parece para ordenar la matriz en absoluto. Al imprimir la matriz después de llamar a la función sort() la matriz está en su orden inicial.
También intenté adaptar la respuesta desde aquí: sorting 2D array of String in java pero me encontré con el mismo problema.
¿He cometido algún error fatal al adaptar estas soluciones, o debería funcionar mi código?
Además, ¿cómo haré para ordenar esta matriz en orden descendente? ¿Reemplazaría la declaración de devolución en compare() con esta línea?
return -numOfKeys2.compareTo(numOfKeys1);
Cualquier ayuda sería muy apreciada. ¡Gracias!
EDITAR: Solo publico el resto de mi código para ver si el problema está en otra parte.
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]);
}
}
EDIT 2:
Tengo que trabajar. Gracias a todos por su ayuda. Tenía varias funciones de Sort() (una más antigua que no funcionaba, y la que ve arriba), y resulta que estaba llamando a la incorrecta, a pesar de que pensé que había cambiado la llamada. Solo uno de esos dias.
Siéntase libre de utilizar el código de arriba si desea ordenar una matriz. Está funcionando completamente ahora.
Ese código no debería ejecutarse; la matriz de matrices tiene una única matriz con un conjunto de matrices de dos elementos, la trata como una matriz de dos matrices de diez elementos cuando la imprime. –
Tienes razón, estaba confundiendo mis índices. Gracias por corregirme. Y gracias por tu ayuda. – Drake