TDictionary

vložil Radek Červinka 8. listopadu 2010 09:48

V minulém článku o porovnání rychlosti JSON s jinými způsoby se diskuze trošku rozjela, tak přicházím i se svým řešením pro rychlou implementaci za pomoci TDictionary, které je velmi rychlé a umožňuje použití generik.

TDictionary neumožňuje ukládání a načítání, takže jsem si musel vypomoci sám, abych dodržel podmínky z minulého článku (procedury mLoad a mSave).

Časová náročnost je velmi malá (největší čas trvá mé ne moc optimalizované načítání a ukládání), samotná práce s položkami je velmi efektivní (2000 položek, 500 aktualizací).

třída: celkova doba : doba prace bez nahravani/ukladani

HashedStringList: 5969 : 5953
TDictionary: 16 : 0
MS XML: 29922 : 29781
TIniFile: 2469 : 2469
TMemIni: 5953 : 5937
StringList: 3016 : 3016

    1uses
    2  Generics.Collections;
    3
    4
    5 procedure TForm2.btnHashList2Click(Sender: TObject);
    6 var
    7   i:Integer;
    8   list: TDictionary<string, string>;
    9
   10   procedure mSave;
   11   var
   12     p: TPair<string, string>;
   13     t: TextFile;
   14   begin
   15     assignfile(t, Edit3.Text+'testhash.dat');
   16     rewrite(t);
   17     for p in list do
   18       writeln(t, p.Key + '='+p.Value);
   19     closefile(t);
   20   end;
   21   procedure mLoad;
   22   var
   23     t: TextFile;
   24     s, s1: string;
   25     i:Integer;
   26   begin
   27     assignfile(t, Edit3.Text+'testhash.dat');
   28     reset(t);
   29     while not Eof(t) do
   30     begin
   31       readln(t, s);
   32       i := Pos('=', s);
   33       s1 := Copy(s, 1, i - 1);
   34       list.Add(Copy(s, 1, i - 1), Copy(s, i+1, Length(s)));
   35     end;
   36     closefile(t);
   37   end;
   38
   39 begin
   40   ZacitCas(z, k);
   41
   42   list:=TDictionary<string, string>.Create;
   43
   44   ZacitCas(z1, k1);
   45   for i := 0 to StrToIntDef(Edit1.Text,1000) - 1 do
   46     begin
   47       list.AddOrSetValue(IntToStr(i)+'S', 'asdfghjklp');
   48       list.AddOrSetValue(IntToStr(i)+'I', IntToStr(9999));
   49     end;
   50   KonecCas(z1, k1);
   51   mSave;
   52
   53   list.Free;
   54
   55   list:=TDictionary<string, string>.Create;
   56   mLoad;
   57
   58   ZacitCas(z1, k1, False);
   59   for i := 0 to StrToIntDef(Edit2.Text,200) - 1 do
   60     list.AddOrSetValue('700S', 'zmena');
   61   KonecCas(z1, k1);
   62   mSave;
   63
   64   list.Free;
   65
   66   KonecCas(z, k);
   67
   68   Memo1.Lines.Add('HashedStringList: '+CelkovyCas(k)+' : '+CelkovyCas(k1));
   69 end;

Závěr: pokud potřebujete strukturovaný zápis dat, zvažte použití JSON, v ostatních případech zvažte TDictionary nebo i jiné třídy z Generics.Collections. Delphi 2009+.


Nabízíme Delphi školení a konzultace na různá témata, primárně ve Vaší firmě.

Tagy:

Praxe

Komentáře

8.11.2010 10:45:57 #

pingback

Pingback from topsy.com

Twitter Trackbacks for
        
        Delphi.cz | TDictionary
        [delphi.cz]
        on Topsy.com

topsy.com

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS