Autor Téma: Ako spravne pouzit value TList v TDictionary<string,TList>  (Přečteno 606 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5919
  • Karma: 43
    • Verze Delphi: W10 + D11
Re:Ako spravne pouzit value TList v TDictionary<string,TList>
« Odpověď #15 kdy: 20-07-2021, 10:10:39 »

Ešte jedna vec
Kód: Delphi [Vybrat]
  1.   if sl.Count > 0 then
  2.   begin
  3.     for I := 0 to sl.Count - 1 do
  4.       DictSyno.Add(sl[I], sl);
  5.   end;
Tá podmienka je celkom zbytočná. Pri sl.Count = 0 bude for I := 0 to -1 do. Podmienka pre cyklus nie je nikdy splnená a kód sa nikdy nespustí.
Tiež som to tak robil ;)
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Ako spravne pouzit value TList v TDictionary<string,TList>
« Odpověď #16 kdy: 20-07-2021, 11:22:26 »
stanislav zabudol si na mtSynon.next; nakonci
Kód: Delphi [Vybrat]
  1.    
  2.     Item := TStringList.create();
  3.     while not mtSynon.Eof do
  4.     begin
  5.       if (group <> Fsyno.AsInteger) or (mtSynon.RecordCount = mtSynon.RecNo) then
  6.       begin
  7.         if mtSynon.RecordCount = mtSynon.RecNo //pridame do SL posledny
  8.             then Item.add(UpperCase(Fslovo.AsString));  
  9.         for i := 0 to Item.Count - 1 do
  10.         begin
  11.             DictSynon.Add(Item[i],Item);          //tu sa naplna Dict, to znamena ze pri poslednom prechode by cyklus while skoncil a nezapisal by do dict
  12.         end;
  13.         Item := TStringList.create();
  14.         group := Fsyno.AsInteger;
  15.       end;
  16.       Item.add(UpperCase(Fslovo.AsString));  //tu sa naplna SL
  17.       mtSynon.next;
  18.     end;
« Poslední změna: 20-07-2021, 11:26:13 od František »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5919
  • Karma: 43
    • Verze Delphi: W10 + D11
Re:Ako spravne pouzit value TList v TDictionary<string,TList>
« Odpověď #17 kdy: 20-07-2021, 11:40:37 »
Daný kód je až za cyklom while. Takže Next s tým nemá nič spoločné.
Ten vo while som neanalyzoval.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 690
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Ako spravne pouzit value TList v TDictionary<string,TList>
« Odpověď #18 kdy: 20-07-2021, 11:50:34 »
ten kod za whiile som vyhodil tou podmienkou, ale ti si naplnal SL stale tou istou hodnotou, chybal ti tam next, lebo tam nema co robit,
cyklus robi to tnaledovne:

next naplna SL
ked pride ku zmene GR tak to zapise do dict a creatne novy SL
ale pri poslednom cykle nedoje uz v starom kode ku zapisu (lebo cyklus konci skor ako dojde ku zmene GR) a preto som to poriesil tou duplicitou, no na tvoj podnet som to upravil tak ako to je teraz