Zitat von
jaenicke:
Das ist doch mal ein Kunststück. 1500 Motorenhersteller und eine eindeutige Nummer in maximal dreistelligen Zahlen?
Ich würde das für das eigentliche Problem halten.
Dessenungeachtet sollte diese Anforderung mit einer Hashmap, bzw. selbst mit einer TStringList (Sorted := True) in relativ kurzer Zeit erstens zu implementieren und zweitens abgewickelt sein.
Delphi-Quellcode:
Procedure ErsetzeMotorenHerstellerDurchIDWerte (aHerstellerliste, slMotorenListe : TStringList);
Var
slHerstellerLookup : TStringlist;
sHersteller : String;
i, j, ID : Integer;
Begin
slHerstellerLookup := TStringlist.Create;
Try
For i:=0 to aHerstellerListe.Count - 1 do
slHerstellerLookup.AddObject (HerstellerName (aHerstellerListe[i]), Pointer (HerstellerID(aHerstellerListe[i])));
slHerstellerLookup.Sorted := True;
For i:=0 to slMotorenListe.Count - 1 do Begin
sHersteller := HerstellerName (slMotorenListe[i]);
j := slHerstellerLookup.IndexOf (sHersteller);
if j=-1 then
ID := 99999
else
ID := Integer (slHerstellerLookup.Objects[j]);
slMotorenListe[i] := IntToStr(ID)+','+EntferneHersteller(slMotorenListe[i]);
End;
Finally
slHerstellerLookup.Free;
End;
End;
Die Funktionen 'HerstellerName', 'HerstellerID' und 'EntferneHersteller' sind von Dir zu implementieren. Wenn die Performance nicht reicht, ersetze den Datentyp des 'slHerstellerLookup' durch eine Hashmap. Eine Implementierung findest Du hier im Forum.