Autor Téma: TDictionary - hodnota posledného Key  (Přečteno 556 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
TDictionary - hodnota posledného Key
« kdy: 19-12-2020, 20:28:05 »

Mám
Kód: Delphi [Vybrat]
  1. FYearsFlats: TDictionary<Integer, Integer>;
Je možné priamo získať poslednú hodnoty Key?

W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:TDictionary - hodnota posledného Key
« Odpověď #1 kdy: 19-12-2020, 20:55:33 »
Mám
Kód: Delphi [Vybrat]
  1. FYearsFlats: TDictionary<Integer, Integer>;
Je možné priamo získať poslednú hodnoty Key?
Ne. Nevim jak v Delphi, ale treba v C# plati, ze poradi klicu v Keys neni specifikovano. A dela to na me dojem, ze v tomhle to Delphi kopiruje: pouziva TKeyCollection a ta neumoznuje indexaci - je to jen enumerator, ale na poradi klicu bych se nespolehal, ani kdybych je vyloudil pruchodem pres vsechny klice. V podstate je to "pytlik" na neusporadane dvojice klic:hodnota
« Poslední změna: 19-12-2020, 20:57:14 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:TDictionary - hodnota posledného Key
« Odpověď #2 kdy: 19-12-2020, 22:13:22 »
Ďakujem. Hľadám najvyššiu hodnotu a celkový položiek nebude veľký = počet rokov užívania programu. Takže pomocou iterácie to bude rýchlo.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 233
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:TDictionary - hodnota posledného Key
« Odpověď #3 kdy: 19-12-2020, 23:37:46 »
Ehm, není to kanón na vrabce?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:TDictionary - hodnota posledného Key
« Odpověď #4 kdy: 20-12-2020, 08:40:48 »
Ďakujem. Hľadám najvyššiu hodnotu a celkový položiek nebude veľký = počet rokov užívania programu. Takže pomocou iterácie to bude rýchlo.
Jako vzdycky  ;) Neni mezi hodnotou posledniho klice a nejvetsi hodnotou klice docela rozdil?

Pokud nejde o vykon, tak to nemusis iterovat sam:
Kód: Delphi [Vybrat]
  1. var maxKeyValue := MaxIntValue(dictionary.Keys.ToArray());

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:TDictionary - hodnota posledného Key
« Odpověď #5 kdy: 20-12-2020, 09:49:34 »
Ďakujem. Hľadám najvyššiu hodnotu a celkový položiek nebude veľký = počet rokov užívania programu. Takže pomocou iterácie to bude rýchlo.
Jako vzdycky  ;) Neni mezi hodnotou posledniho klice a nejvetsi hodnotou klice docela rozdil?

Pokud nejde o vykon, tak to nemusis iterovat sam:
Kód: Delphi [Vybrat]
  1. var maxKeyValue := MaxIntValue(dictionary.Keys.ToArray());
V tomto prípade ani nie. Položky napĺňam od najnižšieho roka (key) po najvyšší. Takže posledný je aj najvyšší. Ale keď sa nemôžem spoľahnúť na poradie... Ďakujem za ukážku kódu. O tom MaxIntValue som zabudol. Čítal som o tom, ale ešte som to nepoužil. Takže táto informácia nemala nárok uložiť sa do mojej hlavy :( :'(
Áno, je to kanón na vrabcov. Ale
  • polia som prestal používať - hlavne kvôli zmene veľkosti. Používam ich, ak sa sa jedná jedine o statické pole
  • generikum - v tomto prípade mi neponúka možnosť jednoducho si zistiť hodnotu podľa roka
  • dictionary - ponúka najväčšie pohodlie. V tomto prípade ho často nepoužívam
  • vzhľadom na počet položiek a súčasný HW ma výkon ani pamäť netrápia
  • prečo by som mal vymýšľať a zostrojovať koleso, keď to už niekto urobil


W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 481
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Re:TDictionary - hodnota posledného Key
« Odpověď #6 kdy: 20-12-2020, 10:12:38 »
Excellent
Rated 1 time

Jako vzdycky  ;) Neni mezi hodnotou posledniho klice a nejvetsi hodnotou klice docela rozdil?


PF narazal hlavne na tvoju otazku. Das do fora otazku ze chces posledni klic. Pre tvoj svet v tvojom pripade je posledni klic aj navacsi, lenze o tom tu z nas nikto nema ani ponatia a vsetci hladame odpoved na to ako najst posledny, nie najvacsi  ;D ;D ;D. Ale nic v zlom, su vianoce  ;)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:TDictionary - hodnota posledného Key
« Odpověď #7 kdy: 20-12-2020, 10:29:38 »
To mi je jasné ;)  Mne mnohé veci dochádzajú pomaly. Už som tu písal, že moji rodičia na mne nešetrili a kúpili mi dlhé káble :D  Ak sa porovnám s rovesníkmi, tak som na tom ešte dobre 8)
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1539
  • Karma: 37
    • Pepak.net
Re:TDictionary - hodnota posledného Key
« Odpověď #8 kdy: 20-12-2020, 11:06:30 »
Mimochodem, na tohle jsou docela dobré knížky 50 let staré o datových strukturách a jejich použití. A je to věc, kterou by měl znát každý programátor už jenom proto, aby použil vhodnou strukturu pro vhodný účel. Mapa (slovník, hash tabulka atd.) je vhodná pro rychlé vyhledávání podle klíče ("mám klíč X, chci najít jemu příslušející položku"), ale nehodí se pro porovnávání mezi hodnotami (ať už klíče nebo hodnot). Na to by se ti hodilo spíš seřazené pole (TArray, TList) nebo strom (mají Delphi v defaultu nějakou použitelnou stromovou strukturu?) nebo třeba halda (pokud chceš najít "největší" položku, zpracovat ji a pak se vrhnout na další "největší" položku). Pokud potřebuješ operací víc, zvaž použití víc struktur současně (jako různé "indexy" pro různé účely).

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:TDictionary - hodnota posledného Key
« Odpověď #9 kdy: 20-12-2020, 20:05:10 »
(mají Delphi v defaultu nějakou použitelnou stromovou strukturu?)
Mam jen verzi 10.2 Tokyo a tam AFAIK nic neni. Existuje https://github.com/davidberneda/GenericTree.