![]() |
Sortierung mit Abhängigkeit
Angenommen ich hätte folgenden Text in einer StringList mit folgenden Werten:
D = C A = D C B = A F Der Text soll dann so aussehen: F C D = C A = D B = A Dachte erst an 2 Schleifen, die eine liest das Schema und die andere prüft die Abhängigkeit. Vielleicht eine rekursive Function/Procedure? |
AW: Sortierung mit Abhängigkeit
Eigene Sortierungen erledigt man nach meiner Erfahrung am Besten mit
![]() |
AW: Sortierung mit Abhängigkeit
Ich meine eine topologische Sortierung:
![]() |
AW: Sortierung mit Abhängigkeit
Sry, das ist mir momentan zu mathematisch :(
|
AW: Sortierung mit Abhängigkeit
Das sollte recht einfach über eine rekursive Funktion machbar sein.
Du hast 2 Listen: Output und toPrint. Output ist leer, toPrint ist die Liste der Elemente. Dann schreibst du eine Funktion, die im Endeffekt folgendes prüft: Hat das Element keine Abhängigkeit? Dann gib das Element aus (sofern es noch nicht ausgegeben wurde) Hat das Element eine Abhängigkeit? Gib erst die Abhängigkeit aus, dann das Element. - immer sofern es noch nicht ausgegeben wurde.
Code:
Wenn du dann
printElement(element):
toPrint.remove(element) ist element ohne Anhängigkeiten? wenn element nicht in Output Output.add(element) return sonst // Element ist sowas wie A = B Abhängigkeit = parseAbhängigkeit(element); // parseAbhängigkeit würde bei (A = B) B zurückgeben. if output.contains(abhängigkeit) then return; // bereits ausgegeben if !toPrint.contains(abhängigkeit) then // FEHLER: zyklische Abhängigkeit printElement(findeElement(B)); // findeElement findet B in der Liste, und gibt B oder B = ... zurück, je nach dem was in der Liste steht. Output.add(element);
Code:
aufrufst, ist in Output die sortierte Liste. Der Sauberkeithalber sollte man toPrint und Output als Parameter übergeben und nicht global definieren.
while (toPrint.size > 0)
printElement(toPrint.get(0)) Wenn du mehr als 1 Abhängigkeit hast (bspw. A = B, C) dann gibt parseAbhängigkeit eine Liste zurück, über die Iteriert werden muss. Sonst ändert sich eig. nichts. Und noch ne Anmerkung: Keine Garantie dass das funktioniert - reines Kopfkonstrukt. |
AW: Sortierung mit Abhängigkeit
Zitat:
|
AW: Sortierung mit Abhängigkeit
Zitat:
|
AW: Sortierung mit Abhängigkeit
Code:
Man kann natürlich vorher erstmal alles ohne Abhängigkeit hochziehen, aber das ist von den Abhängikeiten her ja egal
schleife i (0 bis ende) -> laufe die Liste durch, von oben nach unten
schleife j (i bis ende) -> schleife über alles, was noch nicht einsortiert wurde wenn element j von nichts oder nur von etwas über i abhängt dann tausche Elemente an i und j aus und erhöhe i -> also j hochschieben erhöhe j ende j wenn in schleife j nichts getauscht wurde dann exception, da nicht auflösbar -> Abhängiges fehlt oder Kreisreferenz erhöhe i ende i Denn so ist es ja, im Grund, auch OK
Code:
C
D = C A = D B = A F |
AW: Sortierung mit Abhängigkeit
Uwe Raabe: Ja, die Werte ohne Abhängigkeit können theoretisch an beliebiger stelle stehen.
Ich versuche mal den Ansatz von JasonDX oder himitsu umzusetzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz