Sortieren eines 2D-Integer-Arrays basiert auf einer Spalte
Ich habe ein 2D-array möchte ich Sortieren, basierend auf der zweiten Spalte. Die erste Spalte sollte bleiben, gepaart mit der zweiten Spalte.
2D-array wird zunächst wie folgt (2x10-matrix):
0 10
1 9
2 9
3 9
4 15
5 10
6 4
7 8
8 11
9 12
Möchte ich die oben genannten 2D-array sortiert werden wie diese:
4 15
9 12
8 11
0 10
5 10
1 9
2 9
3 9
7 8
6 4
Nun, ich habe versucht, die Anpassung der Antwort aus: Sortieren ein zwei-dimensionales array, basierend auf einer Spalte in diesem code:
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);
}
});
Aber es scheint nicht so zu Sortieren das array überhaupt. Beim drucken das array nach dem Aufruf der Funktion sort() das array in seine ursprüngliche Ordnung.
Ich habe auch versucht, die Anpassung der Antwort von hier: Sortierung 2D-array von Strings in java aber ich hatte das gleiche problem.
Habe ich einige fatale Fehler bei der Anpassung dieser Lösungen, oder sollte mein code funktionieren?
Auch, wie würde ich mich über Sortieren Sie das array in absteigender Reihenfolge? Würde ich ersetzen Sie die return-Anweisung in der compare () - mit dieser Zeile?
return -numOfKeys2.compareTo(numOfKeys1);
Jegliche Hilfe würde sehr geschätzt werden. Danke!
EDIT: Nur die Buchung der rest von meinem code zu sehen, wenn das problem woanders liegt.
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:
Habe ich es zu arbeiten. Danke an alle für Eure Hilfe. Ich hatte mehrere Sort () - Funktionen (ein älteres, das nicht funktioniert, und die, die Sie siehe oben), und es stellt sich heraus, ich rief die falsche ein, obwohl ich dachte, ich änderte den Anruf. Nur einer dieser Tage.
Fühlen Sie sich frei, verwenden Sie den obigen code, wenn Sie möchten, ein array Sortieren. Es ist voll funktioniert jetzt.
Du hast Recht, ich war immer meine Indizes Durcheinander. Danke für die Korrektur mich. Und vielen Dank für deine Hilfe.
InformationsquelleAutor Drake | 2011-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es funktioniert gut für mich. Zu umgekehrter Reihenfolge würden Sie negieren die original
compareTo
, oder vertauschen Sie die Variablen, aber nicht beide.Brauchen wir wahrscheinlich zu sehen, den rest des Codes zu verstehen, warum Sie sehen, was Sie sehen; ich Schnitt und klebte Ihren code wörtlich, so Chancen stehen gut, das Problem liegt woanders.
Schöne Erklärung.
InformationsquelleAutor Dave Newton
Code funktioniert bei mir auch. Sorry für den chaotisch-code, hatte ich einen kurzen test. Grüße!
InformationsquelleAutor Mechkov
Ich lief auch deinen code vollständig und es funktionierte... eine Sache, obwohl ich ersetzen musste, die
mit
um den code auszuführen, denn sonst gibt es ein array index out of bounds exception.
Negiert die compareTo return ist einfacher als der Austausch der Werte und ermöglicht die einfache änderung.
InformationsquelleAutor Thihara