Array Sortierung auf andere Arrays anwenden

  • Themenstarter Themenstarter joefromholland
  • Beginndatum Beginndatum
J

joefromholland

Gast
Hallo,

Ich habe folgende Frage zu einem (wie ich finde, recht grundlegendem) Problem, und hoffe, dass es eine elegante Lösung bereits implementiert gibt.

Ich möchte einen Vektor sortieren:

Java:
String[] data1 = .. // einfach blos Worte

das geht bekanntlich einfach mit ArrayList, HashSet usw. Jetzt habe ich weitere Vektoren gleicher Länge:

Java:
Int[] data2 = new int[data1.length] // = gefüllt mit zahlen ..
String[] data3 = new String[data1.length] // = gefüllt mit worten

und ich möchte die gleiche Sortierung wie in data1 auf diese Vektoren anwenden, unabhängig vom Inhalt der vektoren data2 und data3. Ich brauche dementsprechend die Information, wie data1 sortiert wurde, zb als Indexvektor. (Leute, die schon mal R programmiert haben wissen, welche funktion ich vermisse)

gibt es eine solche Funktion?

freundliche Grüße ans Forum
 
Sind zwar keine Vektoren, sondern Array's, aber:
mir ist keine solche Funktion bekannt. Je nach Anwendungsfall kannst du aber selber was basteln. Entweder sortierst du selber, dann kannst du dir den Index merken, oder du erstellst eine Datenstruktur, die alle 3 Werte enthält und sortierst die Menge von dieser Datenstruktur nach dem 1. Wert (data1).
 
1. Du sortierst selbst und ziehst jeden einzelnen Vertauschungsschritt sofort in den anderen Arrays nach.

2. Du sortierst selbst und notierst irgendwo wie du sortiert hast und kannst das nachvollziehen.

Das was ich machen würde:
3. Eine andere Datenstruktur wählen. Alle Daten in eine Objekt packen, einen Array mit Objektreferenzen erstellen und den nach dem einen Objektelement sortieren auf das es ankommt

Kommt mir noch etwas anderes in den Sinn:
4. Einen zusätzlichen Array erstellen (int[]) Die Arrays werden nicht wirklich sortiert sondern im Zusatzarray die Inidzes in der Reihnefolge eingetragen wie man zugreifen muss um eine Reihe zu erhalten.

Hm tönt kompliziert:

Java:
char[] array1 = { 'a', 'x', 'f', 'g', 'q' };
int[]   array3 = { 4, 2, 6, 1, 9 }; // Sortierschlüssel
int[]   array4 = { 3, 1, 0, 2, 4 }; // Müsste natürlich durch den Sortieralgorithums gefüllt werden

for (int i:array4){
	System.out.print(array3[i]);
} // Ausgabe: 1 2 4 6 9
System.out.println("");
for (int i:array4){
	System.out.print(array1[i]);
} // Ausgabe: g x a f q
System.out.println("");
 
Java:
public class ComparableDelegate<T extends Comparable<T>> implements Comparable<T>
{
   public ComparableDelegate( T cmp, Object payload )
...
List<ComparableDelegate<T>> list = ...
Collections.sort( list );
for( ComparableDelegate<T> cd : list ) {
  cd.getPayload(); // do stuff with original object
  ...
 
@janus kannst du den Demo-Quelltext bitte ein wenig erklären? Benötige ich für diese Variante ein eigenes Objekt für jede Zeile? (unter der Annahme dass meine Arrays Spalten einer großen Matrix darstellen sollen)
 
ja, falls du nicht selber sortierst, sondern irgend ein Collection.sort verwendest. Ist es auf jeden Fall sauberer, wenn du statt deine zwei Arrays eine Liste mit Objekten machst. Diese Objekte halten dann deine beiden Werte.

Deine werte haben ja irgend einen fachlichen Kontext... Name und Alter. Da ist es auf jeden Fall sinnvoll ein Objekt Person mit den beiden Eigenschaften zu machen und diese dann zu sortieren.
 
früher oder später werfe ich den Inhalt der Arrays in eine JTable - Tabelle. Das war sowieso geplant. und die kann sortieren nach Spalten usw. Ist von Hinten durch die Brust ins Auge, funktioniert aber.

Thread kann geschlossen werden.
 

Zurück
Oben