Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Strings durch Zahlen effizient ersetzen???

  Alt 22. Jan 2009, 06:31
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat