Methoden Zweidimensionales Array mit Arrays.sort sortieren?

undercover

Aktives Mitglied
Moin Leute,
mal eine Frage.
Ist es möglich mit der Methode Arrays.sort ein mehrdimensionales Array zu sortieren? Ganz genau nur die Einträge i zu sortieren ([j]) und j gänzlich außen vor zu lassen?
Ich habe eine MergeSort Methode die genau das macht , allerdings möchte ich wissen ob es mit der Arrays.sort geht.

Gruß
 

stg

Top Contributor
Es ist nicht klar, was bei dir i und was j sein soll und was nun wie sortiert werden soll.
Ein zweidimensionales Array ist ein Array von Arrays. Dieses kannst du mit Arrays.sort und einem passendem Comparator sortieren.
Willst du hingegen die "einzelnen Arrays", sortieren, so kannst du in einer Schleife über das "äußere Array" laufen und dann jedes einzelne mit Arrays.sort sortieren.
 

undercover

Aktives Mitglied
Mein Fehler, habe etwas vergessen. Mein Array liegt in folgender Form vor :
String [][] array; zum Verständnis was ich meine ,String [j] array , i = 100 j = 2.
Das Array sieht z.B so aus :
Vor der Sortierung: Nach der Sortierung:
[.][Jeder]-----------------------[.][Jeder]
[Jeder][hat]--------------------[Jeder][hat]
[hat][viel]----------------------[Spass][obwohl]
[viel][Spass]-------------------[es][regnet]
[Spass][obwohl]---------------[hat][viel]
[obwohl][es]-------------------[obwohl][es]
[es][regnet]-------------------[regnet][.]
[regnet][.]--------------------[viel][Spass]

Die Sortierung soll sich nur um die i Einträge lexikografisch kümmern. Darf die j Einträge aber nicht ändern.
Geht das überhaupt ?
Ansonsten muss ich es anders lösen.
Eine Merge die es macht habe ich , wollte nur wissen ob es mit einer Methode geht.
 

CSHW89

Bekanntes Mitglied
Wenn ich es richtig verstanden habe: du willst das äußere Array sortieren anhand des i-ten Elements jedes inneren Arrays. Dann so (ungetestet):
Java:
Arrays.sort(array, (a1,a2) -> a1[ i ].compareTo(a2[ i ]))
 
X

Xyz1

Gast
Das geht so nicht, weder mit Arrays.sort noch mit Comparator.

Noch ne Anmerkung: wegfallen.
 
Zuletzt bearbeitet von einem Moderator:

undercover

Aktives Mitglied
Das sollte keine Scherzfrage sein, es hat einen Sinn wieso das jeweils zweite Element unsortiert ist.
In der unsortierten Liste sieht man das jedes Wort einen Nachfolger hat z.b. der "." - "Jeder". Das ist ein Beispieltext, es kann auch sein das es 200 "." gibt die immer einen anderen Nachfolger haben.
Ich möchte das Array so sortieren das ich alle "." mit möglichen Nachfolgern habe um dann random einen Punkt zu nehmen mit einem zufälligen Nachfolger :).
Deshalb ist es wichtig das das zweite Element immer an das erste gebunden ist und nicht vertauscht oder sortiert wird .
 
X

Xyz1

Gast
Ach so, das ist oben so schlecht formatiert, dass es für mich zufällig aussieht. also ist das irgenwie gekuppelt. Dann geht das natürlich --- andernfalls NICHT!
 

undercover

Aktives Mitglied
^^ pardon , manchmal ist es schwer eine Korrekte Frage zu formulieren , wenn man es nicht besser beschreiben kann :)
@Meniskusschaden, habe ich leider ohne Erfolg , werde es Morgen erneut in Angriff nehmen. Iwi muss es ja klappen das lediglich die Spalte lexikografisch sortiert wird ohne die Zeilen [j] zu verändern, sodass es am Ende ungefähr so ausschaut:
Bsp.
[.][Ende]
[.][Anfang]
[Anfang][war]
[Anfang][ist]
[bereit][gewesen]

Gruß , vielen Dank für die Unterstützung :)
 

mrBrown

Super-Moderator
Mitarbeiter
^^ pardon , manchmal ist es schwer eine Korrekte Frage zu formulieren , wenn man es nicht besser beschreiben kann :)
Es würde schon deutlich leichter sein, wenn du statt deiner Array-Schreibweise eine gebräuchliche nutzt.

Dein Beispielarray entspricht vermutlich diesem: {{".","Ende"},{".","Anfang"},{"Anfang","war"},{"Anfang","ist"},{"bereit","gewesen"}} ?

Das kann man ganz wunderbar nach dem jeweils erstem String sortieren: Arrays.sort(array, (a1,a2) -> a1[ 0 ].compareTo(a2[ 0 ]));
Die inneren Arrays werden dabei nicht verändert
 

undercover

Aktives Mitglied
@mrBrown
genau so meinte ich es, danke für den Hinweis , ist fürs nächste mal abgespeichert.
Ich hatte einen Fehler @CSHW89 hatte es ebenso beschrieben, habe für i nur die länge des Arrays angegeben, aus dem Grund , das mir diese Schreibweise nicht bekannt ist. Handelt es sich dabei um einen Lambda Expression? Könntest du kurz erleutern was hier "Arrays.sort(array, (a1,a2) -> a1[ 0 ].compareTo(a2[ 0 ]));" passiert ?

Vielen Dank für die schnelle Antwort, ich bin echt begeistert, tolle community :)
 

undercover

Aktives Mitglied
Könnte man anhand des erstellten mehrdimensionalen Arrays eine binäre Suche durchführen, die wieder nur das äußere Array durchsucht und einen int index liefert der die Anzahl der Vorkommen zeigt?
Als Beispiel int index = 3; (da drei mal der Punkt im äußeren Array vorkommt?).
Dazu müsste ja das erste und letzte Vorkommen ermittelt, ein Array erstellt und die länge des Array ausgegeben werden.
 

undercover

Aktives Mitglied
@Flown
Die Aufgabe war es , aus einem Text die Wörter heraus zu lesen und zu jedem Wort die möglichen Nachfolger zu speichern. Als Beispiel in einem Text gibt es 200 x ".", die Punkte werden als Wörter gepeichert und dazu die Wörter als Nachfolger die darauf folgen.
Am Ende soll ein Zufallstext erstellt werden , indem man ein Wort sucht und einen zufälligen Nachfolger ausgibt , im nächsten Durchlauf ist dann das Wort = Nachfolger usw. Es wird also ein Zufallstext generiert.
Ich hatte das ganze schon gelöst indem ich ein mehrdimensionales Array erstellt habe, und es dann sortiert habe (MergeSort). Als es sortiert war, habe ich es per binäre Suche durchsucht und erstes und letztes Vorkommen des Wortes in einem Array gespeichert. Per Array.length habe ich random einen Wert genommen und so einen zufälligen Nachfolger raussuchen.

Ich wollte dies jetzt mit den gegebenen Klassen von util probieren.
Das sortieren konnte hier schon gelöset werden, leider klappt die binarySearch nicht, da man kein erstes und letztes Vorkommen suchen kann.
Muss also etwas anderes finden.
 

undercover

Aktives Mitglied
@mrBrown
Ist mir auch aufgefallen als ich zur util binarySearch gekommen bin ^^ da funktioniert leider kein mehrdimensionales Array :). ArrayList , HashMap und Tree...schau ich mir jetzt mal an .
Danke für eure Mühe :) wieder ein Stück dazu gelernt.
 

mrBrown

Super-Moderator
Mitarbeiter
Indem du die vorhandene Binary-Search nutzt?

int r = Arrays.binarySearch(array, new String[]{"."}, (a1, a2) -> a1[0].compareTo(a2[0]));

new String[]{"."} deshalb, weil du ein Array von String[] hast, du kannst also auch nur nach Arrays suchen, "." ist dabei das Wort, was du suchst.
Der Comparator ist der gleiche, der auch zum sortieren benutzt wurde.
 

Flown

Administrator
Mitarbeiter
Guck mal hier wie ich sowas lösen würde (etwas vereinfacht noch):
Java:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
  
  public static void main(String... args) {
    System.out.println(generateRandomTextFrom("Jeder hat viel Spass obwohl es regnet."));
  }
  
  public static String generateRandomTextFrom(String text) {
    Map<String, List<String>> possibilities = computePossibilities(text);
    StringBuilder builder = new StringBuilder();
    for (String word = getRandom(possibilities.get(".")); !"."
        .equals(word); word = getRandom(possibilities.get(word))) {
      if (builder.length() != 0) {
        builder.append(' ');
      }
      builder.append(word);
    }
    return builder.append('.').toString();
  }
  
  private static String getRandom(List<String> words) {
    return words.get((int) (Math.random() * words.size()));
  }
  
  private static Map<String, List<String>> computePossibilities(String text) {
    String last = ".";
    Map<String, List<String>> possibilities = new HashMap<>();
    for (String word : text.split("((?<=\\.)|(?=\\.)|\\s+)")) {
      possibilities.computeIfAbsent(last, s -> new ArrayList<>()).add(word);
      last = word;
    }
    return possibilities;
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K drei eindimensionale Arrays in ein zweidimensionales Array Java Basics - Anfänger-Themen 10
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
G zweidimensionales int Array sortieren Java Basics - Anfänger-Themen 57
P Zweidimensionales Array als Tabelle mit befüllten Zahlen Java Basics - Anfänger-Themen 10
Yasemin bahar zweidimensionales Array Java Basics - Anfänger-Themen 5
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
I Java zweidimensionales array befüllen mit for-schleife Java Basics - Anfänger-Themen 2
J zweidimensionales Array Java Basics - Anfänger-Themen 1
S Zweidimensionales Array in ein eindimensionales Array speichern Java Basics - Anfänger-Themen 6
J Zweidimensionales array kopieren und in eindimensionales überführen Java Basics - Anfänger-Themen 304
X Java zweidimensionales Array Java Basics - Anfänger-Themen 5
J Zweidimensionales Array in CSV File exportieren Java Basics - Anfänger-Themen 3
F Erste Schritte zweidimensionales array Java Basics - Anfänger-Themen 2
J Erste Schritte zweidimensionales Array Muster befüllen. Java Basics - Anfänger-Themen 4
K Zweidimensionales Array erstellen und zufällig mit 0 und 1 füllen Java Basics - Anfänger-Themen 11
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
W Erste Schritte Zweidimensionales Array - Gerade Zahlen anzeigen lassen Java Basics - Anfänger-Themen 3
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
C ZweiDimensionales Array erstellen und Spiegeln Java Basics - Anfänger-Themen 1
H zweidimensionales array füllen Java Basics - Anfänger-Themen 6
D Zweidimensionales Array ( Java Basics - Anfänger-Themen 2
D Zweidimensionales Array (Länge) Java Basics - Anfänger-Themen 2
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
M Zweidimensionales Array um 1 addieren Java Basics - Anfänger-Themen 3
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
C Methoden Diagonalen am best. Punkt im zweidimensionales array finden Java Basics - Anfänger-Themen 3
S Zweidimensionales Array mit Diagonalen Java Basics - Anfänger-Themen 9
M Zugriffsproblem auf (zweidimensionales) Array in einer ArrayList Java Basics - Anfänger-Themen 15
C Datentypen Zweidimensionales Array mit String und int Java Basics - Anfänger-Themen 3
W Datentypen Zweidimensionales Boolean Array Java Basics - Anfänger-Themen 13
A Zweidimensionales Array Java Basics - Anfänger-Themen 3
M Zweidimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
C zweidimensionales Array sortieren Java Basics - Anfänger-Themen 6
B Zweidimensionales Array durchsuchen und ändern Java Basics - Anfänger-Themen 8
J Zweidimensionales Array durch ToString ausgeben lassen Java Basics - Anfänger-Themen 21
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
M Zweidimensionales Array befüllen Java Basics - Anfänger-Themen 4
C Zweidimensionales String Array initialisieren Java Basics - Anfänger-Themen 2
S Zweidimensionales Array mit Schleife summieren Java Basics - Anfänger-Themen 2
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
F Datentypen Zweidimensionales Array füllen Java Basics - Anfänger-Themen 6
S zweidimensionales ARRAY Java Basics - Anfänger-Themen 2
S zweidimensionales Array Java Basics - Anfänger-Themen 6
berti99 Zweidimensionales Array befüllen Java Basics - Anfänger-Themen 5
U Zweidimensionales Array mit Eindimensionalem Array Java Basics - Anfänger-Themen 7
J zweidimensionales Array einselen und ausgeben Java Basics - Anfänger-Themen 15
G Zweidimensionales Array - dynamisch Java Basics - Anfänger-Themen 4
M Zweidimensionales Array Java Basics - Anfänger-Themen 3
G zweidimensionales Array vergrößern Java Basics - Anfänger-Themen 3
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
J zweidimensionales Array Java Basics - Anfänger-Themen 3
M Zweidimensionales String-Array initialisieren Java Basics - Anfänger-Themen 6
P zweidimensionales Array erstellen Java Basics - Anfänger-Themen 9
D erste spalte eines zweidimensionales Array sortieren ??!! Java Basics - Anfänger-Themen 2
N zweidimensionales 10x10 Feld erstellen Java Basics - Anfänger-Themen 3
D aus 2 arrays ein zweidimensionales formen Java Basics - Anfänger-Themen 9
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
V Zweidimensionales Ganzzahlfeld Java Basics - Anfänger-Themen 7
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben