![]() |
Code Optimierung gesucht
Hi,
ich habe folgende Klassen (alles stark vereinfacht und auf das grundlegende Problem reduziert):
Delphi-Quellcode:
Verwaltet werden die Auto-Hersteller A-D in folgenden Klassen:
type TAuto = class(TComponent)
public FNameOfCar: string; FColor: integer; FNumberOfWheels: integer; FLicencePlate: string; end; type TAutoHerstellerA = class(TAuto) public FWindowColor: integer; FNumberOfDoors: integer; end; type TAutoHerstellerB = class(TAuto) public FHupe: boolean; end; type TAutoHerstellerC = class(TAuto) public FNiceCar: boolean; end; type TAutoHerstellerD = class(TAuto) public FRamboPackage: boolean; FAutonomCar: boolean; end;
Delphi-Quellcode:
Nun der interessante Code, ich möchte ein bestimmtes Auto umfärben, jedes Auto existiert nur einmal:
FAutoHerstellerA: TList<TAutoHerstellerA>;
FAutoHerstellerB: TList<TAutoHerstellerB>; FAutoHerstellerC: TList<TAutoHerstellerC>; FAutoHerstellerD: TList<TAutoHerstellerD>;
Delphi-Quellcode:
Man sieht schon, je nach Anzahl der Autohersteller habe ich viele Wiederholungen. Gibt es daher die Möglichkeit, die Listen zu einer Art Gruppe zusammenzufassen und die Gruppe zu durchsuchen?
procedure ColorCar(aCar: string, aNewColor: integer);
var i: integer; begin for i:=0 to FAutoHerstellerA.Count -1 do begin if FAutoHerstellerA[i].FNameOfCar = aCar then FAutoHerstellerA[i].FColor := aNewColor; Break; end; for i:=0 to FAutoHerstellerB.Count -1 do begin if FAutoHerstellerB[i].FNameOfCar = aCar then FAutoHerstellerB[i].FColor := aNewColor; Break; end; for i:=0 to FAutoHerstellerC.Count -1 do begin if FAutoHerstellerC[i].FNameOfCar = aCar then FAutoHerstellerC[i].FColor := aNewColor; Break; end; for i:=0 to FAutoHerstellerD.Count -1 do begin if FAutoHerstellerD[i].FNameOfCar = aCar then FAutoHerstellerD[i].FColor := aNewColor; Break; end; end; Viele Grüße, Martin |
AW: Code Optimierung gesucht
Sind die Klassen wirklich so verschieden, dass man das nicht durch Eigenschaften/Vererbung/Interfaces lösen könnte?
|
AW: Code Optimierung gesucht
Die Grundklasse "TAuto" ist überall gleich, der Rest leider nicht. In der Funktion wird nur auf Eigenschaften von TAuto zurückgegriffen. Habe gerade folgende Idee bekommen:
Delphi-Quellcode:
var
WorkingList: TList<TAuto>; begin WorkingList Create WorkingList.Add(alle anderen Listen hinzufügen zur List) Kombinierte Liste durchsuchen WorkingList wieder freigeben end; |
AW: Code Optimierung gesucht
Pack doch einfach alle Autos in eine einzige Liste.
|
AW: Code Optimierung gesucht
Zitat:
Delphi-Quellcode:
Nachteil: Die Liste muss vor jeder Nutzung neu erstellt ("kombiniert") werden. Gibt es eine Möglichkeit, die Liste dynamisch zu halten, so dass bei Änderung von TAutoHerstellerA automatisch die WorkingList mit aktualisiert wird? Ok, eine Idee für das wären Properties.
var
WorkingList: TList<TAuto>; begin WorkingList := WorkingList<TAuto>.Create; WorkingList.AddRange(TAutoHerstellerA); WorkingList.AddRange(TAutoHerstellerB); WorkingList.AddRange(TAutoHerstellerC); WorkingList.AddRange(TAutoHerstellerD); for i:=0 to WorkingList.Count -1 do begin if WorkingList[i].FNameOfCar = aCar then WorkingList[i].FColor := aNewColor; Break; end; WorkingList.Free; end; |
AW: Code Optimierung gesucht
Nicht nur zum Suchen, sondern grundsätzlich eine Liste.
|
AW: Code Optimierung gesucht
Zitat:
AddRange klappt im oberen Code nicht, gibt es eine andere Möglichkeit, die Listen zu kombinieren? |
AW: Code Optimierung gesucht
Durch das Kominieren nur zu diesem Zweck gewinnst Du nichts im Vergleich zur separaten Suche in den getrennten Listen.
|
AW: Code Optimierung gesucht
Zitat:
|
AW: Code Optimierung gesucht
Vielleicht ist es möglich statt x Listen einen Array/Directory der Listen zu verwenden, dann kannst Du den Code einfach zusammenfassen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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 by Thomas Breitkreuz