Liste nach bestimmten Kriterien ordnen

maki_99

Mitglied
Hallo,
ich tüfftel schon länger daran rum, aber ich komm nicht drauf:
habe eine ungeordnete Liste mit Strings: a1, c2, 1b, 3a, b2, c3
Diese soll so geordnet werden, dass das nächste Element immer einen Substring des vorherigen Elements enthält, also :

a1 > 1b
1b > b2
b2 > c2
c2 > c3
c3 > 3a

Die geordnete Liste wäre dann: a1, 1b, b2, c2, c3, 3a
Kann mir jemand helfen, wie könnte man das am besten lösen?
 
dass das nächste Element immer einen Substring des vorherigen Elements enthält ...
Die geordnete Liste wäre dann: a1, 1b, b2, c2, c3, 3a
"enthält" heißt irgendwo enthält? und "c2" muss nicht "2c" heißen?
Gibt's da irgendwelche Vorgaben/Bedingungen an den Substring (der könnte ja auch aus nur einem Buchstaben bestehen)? Was ist wenn mehrere Elemente einen Teil des Vorgängerelements enthalten?
 
a1 > 1b
1b > b2
b2 > c2
c2 > c3
c3 > 3a

Also irgendwie scheint mir hier etwas nicht zu stimmen. 1b > b2 , ok kann ich noch verstehen, 1b endet mit b und b2 fängt mit b wieder an. Aber dann kommt irgendwie b2 > c2...c2 > c3, da sehe ich kein Muster mehr. Entweder du hast dich vertippt oder willst etwas sortieren, ohne dass es irgend ein Muster für gibt...(was ja nicht geht..)

Außerdem finde ich diese sortierung an sich sinnlos (vermutlich weil ich nicht weiß wofür es dienen sollte). Aber ist es nicht besser etwas z.B als 1. Priorität nach Buchstaben zu sortieren und als 2. Priorität nach Zahlen oder umgekehrt ? also z.B a1,a2,b1,c1,c3 oder a1,b1,c1,a2,c3... Das mit den Substrings ist irgendwie ungewöhnlich

PS. Und was wenn es außer b2 noch b3 gibt ? was soll dann hinter 1b kommen ? 1b > b2 oder 1b > b3 ? Ich würde dir eher raten, das ganze zu umstrukturieren, weil das hier vermutlich nicht so gehen wird wie du es dir vorstellst.
 
Zuletzt bearbeitet:
"enthält" heißt irgendwo enthält? und "c2" muss nicht "2c" heißen?
Gibt's da irgendwelche Vorgaben/Bedingungen an den Substring (der könnte ja auch aus nur einem Buchstaben bestehen)? Was ist wenn mehrere Elemente einen Teil des Vorgängerelements enthalten?
Also die Reihenfolge der Substrings ist egal, es sind einfach zwei verschiedene Zeichen, es können also auch zwei Buchstaben sein. Jeder Substring kommt in der Liste nur zweimal vor, also in zwei Elemente je einmal.

Wie macht man das mit einer Schleife und zwei Listen? Ich habe überlegt While die Größe der ungeordneten Liste größer Null ist, soll die ungeordnete Liste untersucht werden, wenn ein Element gefunden wurde, soll es der geordneten Liste hinzugefügt werden und aus der ungeordneten Liste gelöscht werden. Aber irgendwie bleibt es in der Schleife hängen. Woran kann das liegen??
 
Wenn man deine Strings als Knoten eines Graphs auffasst, und alle Knoten mit gemeinsamen Substrings durch Kanten verbindest, entspricht die Aufgabe der Ermittlung eines Hamilton-Pfads.

Natürlich ist das Problem nicht immer lösbar.
 
Zuletzt bearbeitet:
substrings können verschiedene Längen haben, da muss du dich schon spezifizieren, ob die Strings immer aus 2 Zeichen bestehen, oder ob auch so etwas kommen kann: c12 > 12b oder aghj > ghjp. Außerdem hast du nicht gesagt nach welchem Element sich die anderen richten sollen.
Diese soll so geordnet werden, dass das nächste Element immer einen Substring des vorherigen Elements enthält, also :
Und bei welchem Element soll das bitte beginnen ? Immer beim ersten im Array ?

Falls ja und es immer nur 2 Zeichen sind, dann mach doch einfach:
Java:
	public static void main(String args[]){
		String[] test = {"a1","c2","1b","3a","b2","c3"};
		
		String[] temp = new String[test.length];
		temp[0] = test1[0];
		test[0] = null;
		for (int i = 0 ; i < temp.length ; i++){
			for (int j = 0 ; j < test.length ; j++){
				if (test1[j] != null && test[j].matches("\\w*("+temp[i].substring(0,1)+"|"+temp[i].substring(1,2)+")\\w*")){
					temp[i+1] = test[j];
					test[j] = null;
					j = test.length;
				}
			}
		}
		for (String s : temp){
			System.out.println(s);
		}
	}

Im temp hast du dann deine geordneten Elemente 🙂

Gruß
 
Zuletzt bearbeitet:
substrings können verschiedene Längen haben, da muss du dich schon spezifizieren, ob die Strings immer aus 2 Zeichen bestehen, oder ob auch so etwas kommen kann: c12 > 12b oder aghj > ghjp. Außerdem hast du nicht gesagt nach welchem Element sich die anderen richten sollen. Und bei welchem Element soll das bitte beginnen ? Immer beim ersten im Array ?

Ja, sind immer zwei Zeichen und wo anfängt ist egal.

mit der while-schleife und zwei listen hab ichs inzwischen hinbekommen :toll:

das von dir werd ich auch mal ausprobieren, vielen dank...

Danke an alle :applaus:
 
nunja, wenns egal ist, wo das anfängt, dann kann zu a1 sowohl a3 als auch c1 passen, demnach gibt es je nach substrings x-Möglichkeiten (also ne Art Zufallsergebnis).
Wenn du das willst is das ja ok, ansonsten denke ich, dass das Konzept als solches sehr Fehleranfällig wird.

Gruß Vanny
 

Zurück
Oben