Hallo, ich hoffe das is nu die letzte Frage zu diesem Thema:
Ich habe jetzt alle Permutationen pro Prio, möchte die nun zusammenführen.
Also angenommen:
Delphi-Quellcode:
Prio1:
Kombi (J1, J2), (J2, J1)
Prio2:
Kombi (J3)
Prio3:
Kombi (J4, J4, (J5, J4)
--->
resultarray:
J1, J2, J3, J4, J5
J2, J1, J3, J4, J5
J1, J2, J3, J5, J4
J2, J1, J3, J5, J4
Ich habe jetzt probiert das über folgenden Code zu realisieren:
Delphi-Quellcode:
kz := 0;
while kz < count do
begin
sz := 0;
for i := 0 to ol.Count - 1 do
begin
Priolist := ol[i] as TPriolist;
for j := 0 to Length(Priolist.Jobs) - 1 do
begin
arr_finkombis[kz,sz] := Priolist.Kombis[Priolist.counter, j];
Inc(sz);
end;
Inc(Priolist.counter);
if Priolist.counter >= Length(Priolist.Kombis) then
Priolist.counter := 0;
end;
Inc(kz);
end;
kz zählt die Zeile des resultarray
sz zählt die Spalte des resultarray
Jedes mal wenn eine Kombi einer Prio durchgelaufen ist wird ein Zähler hochgezählt, so dass beim nächsten mal die darauffolgende Kombi genommen wird.
Wurden alle Kombis der Prio einmal durchgelaufen, so wird der Zähler wieder null gesetzt und die Kombiliste der Prio wird neu durchlaufen.
Aber das Problem ist, dass ich ja den Counter einer Prioliste erst höher setzen darf, wenn alle kleineren Listen einmal durchgelaufen sind. Ich habe mir gedacht Ne .change Variable in die Klasse Priolist integrieren und wenn ne Liste durchgelaufen is setze ich change auf true.
Und wenn alle kleineren Listen change auf true sind, dann gehe ich erst zur nächsten Kombination.
Ist das ein praktikabler Weg oder gehts evtl. besser?
Gruß