Sortieren in einem mehrdim. Array

Hallo,

ich habe ein mehrdimmensionales Array und möchte die Daten im Array nach einem bestimmten Array-Feld sortieren.

Das Sortierfeld ist ein nummerisches Feld.

Wie kann ich die Daten sortieren. Gibt es in Jave eine spezielle
Funktion ?

PS: Ich bin Java-Anfänger.

Danke
Arni

Ist natürlich eine sehr dürftige Beschreibung des Problems!! Meinst du mit mehrdimensional wirklich n Dimensionen, oder meinst du zweidimensional - sprich eine Tabelle. 1. Dimension = Zeilen, 2. Dimension = Spalten … und du möchtest die Zeilen nach einer bestimmten Spalte sortiert haben???

Für den Fall kannst du weiter lesen.

Für diese Aufgabe gibt es in Java schon Methoden, die man nutzen kann. Allerdings muss man das Design ein wenig ändern. Für eine Zeile würde man dann eine eigene Klasse erstellen, die die 2. Dimension kapselt.

public class Row {
Object[] theRow=new Object[4 /*spaltenzahl*/];

Dann kann man sich noch Zugriffsmethoden definieren. Z.B:
public Object getColumn( int i ) { return theRow[i]; }
public void setColumn( int i, Object o ) { theRow[i]=o; }
public void setRow( Sring spalte1, Int spalte2, Double spalte3, String spalte4)
{ theRow[0]=spalte1; theRow[1]=spalte2;
theRow[2]=spalte3; theRow[3]=spalte4; }

Die Tabelle sieht dann z.B. so aus:
Row[] theTable=new Row[50 /*Anzahl Zeilen*/];

Anschließend braucht man einen Comparator, der für den in Java vorhandenen Sortieralgorhytmus die Zeilen miteinander vergleichen kann. Am besten nimmt man dafür eine Innere Klasse.

public class Row {
private class RowComparator implements Comparator {
private int rowToCompare=0;
private RowComparator( int whichCol ) {
rowToCompare=whichCol;
}

}

public static Comparator getComparator( int whichCol ) {
return new RowComparator( whichCol );
}

Da der RowComparator angibt, dass er das Comparator Interface implementiert, müssen die Interface-Methoden natürlich auch definiert werden, wobei der Sortierer die compare-Methode dann mit den 2 Zeilen (also Objekten der Klasse Row) aufruft, die zu vergleichen sind:

public boolean equals( Object o ) {

}
public long compare( Object o1, Object o2 ) {
Row r1=(Row)o1, r2=(Row)o2;
switch( rowToCompare ) {
case 0 :
case 3 :
return ((String)r1.getColumn( rowToCompare )).compareTo( (String)r2.getColumn( rowToCompare );
case 1 :
return ((Int)r1.getColumn( rowToCompare )).compareTo( (Int)r2.getColumn( rowToCompare );
case 2 :
return ((Double)r1.getColumn( rowToCompare )).compareTo( (Double)r2.getColumn( rowToCompare );
}
}

Und schon kannst du die Zeilen nach einer beliebigen Spalte sortieren.


// befüllen der Tabelle

Array.sort( theTable, Row.getComparator( 2 ) );

Hoffe es hilft schon mal weiter. Habe das ganze nicht getestet und es liegt im Bereich des Möglichen, dass es so nicht auf Anhieb funktioniert, aber das Prinzip sollte klar geworden sein.

Gruß
Andreas

kleine Ergänzung

Array.sort( theTable, Row.getComparator( 2 ) );

die Klasse heißt java.util.Arrays

also: Array s.sort( … )

gruss
Stefan