Forum Delphi.cz

Delphi => Obecné => Téma založeno: Stanislav Hruška 19-12-2020, 20:28:05

Název: TDictionary - hodnota posledného Key
Přispěvatel: Stanislav Hruška 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?

Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: pf1957 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
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: Stanislav Hruška 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.
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: geby 19-12-2020, 23:37:46
Ehm, není to kanón na vrabce?
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: pf1957 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());
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: Stanislav Hruška 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


Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: Daniel_Andrascik 20-12-2020, 10:12:38

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  ;)
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: Stanislav Hruška 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)
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: pepak 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).
Název: Re:TDictionary - hodnota posledného Key
Přispěvatel: pf1957 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 (https://github.com/davidberneda/GenericTree).