Autor Téma: Ako pristupovať k Values v Dictionary, ak Values sú typu TArray<double>  (Přečteno 1087 krát)

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 400
  • Karma: 16
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Urobil som pokus. Objektu som pridal Destroy.
Ak ho nezruším "manuálne" pomocou free, program tade neprejde.
Jen pro jistotu, je u toho Destroy uvedeno "override"?
Override - Áno mal som ho tam od začiatku:)  Inak by mi tade program nešiel ani pri "manuálnom" Free
« Poslední změna: 23-01-2019, 15:03:53 od miroB »

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1652
  • Karma: 65
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Ak ho nezruším "manuálne" pomocou free, program tade neprejde.

A vlastni ty kolekce hodnoty? Vytvaris je s priznakem doOwnsValues.
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline miroB

  • Hrdina
  • ****
  • Příspěvků: 400
  • Karma: 16
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Ak ho nezruším "manuálne" pomocou free, program tade neprejde.
A vlastni ty kolekce hodnoty? Vytvaris je s priznakem doOwnsValues.
Aha. Nie, myslel som, že TObjectDictionary to má automaticky ako Default.
Ďakujem. Už to funguje bez free.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1652
  • Karma: 65
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Aha. Nie, myslel som, že TObjectDictionary to má automaticky ako Default.

Ne, ne :) Prave proto ma konstruktor TObjectDictionary povinny parametr kombinace vlastnictvi klicu nebo hodnot, jenz bude pri odstranovani z kolekce uvolnovat (pripadne zadnou z techto moznosti, cimz by sprava zivotnosti objektu stratila smysl a dal by se TObjectDictionary<T> nahradit za TDictionary<T>).

Slovy kodu (klice nebo hodnoty se budou uvolnovat s konstruktorem dictionary):

Kód: Delphi [Vybrat]
  1. type
  2.   TNoObjectDictionary = TDictionary<Integer, Integer>; // no object
  3.   TObjectKeyDictionary = TObjectDictionary<TObject, Integer>; // object is the key
  4.   TObjectValueDictionary = TObjectDictionary<Integer, TObject>; // object is the value
  5.   TObjectKeyValueDictionary = TObjectDictionary<TObject, TObject>; // object is the key and value
  6. var
  7.   NoObjectDict: TNoObjectDictionary;
  8.   ObjectKeyDict: TObjectKeyDictionary;
  9.   ObjectValueDict: TObjectValueDictionary;
  10.   ObjectKeyValueDict: TObjectKeyValueDictionary;
  11. begin
  12.   NoObjectDict := TNoObjectDictionary.Create;
  13.   ObjectKeyDict := TObjectKeyDictionary.Create([doOwnsKeys]);
  14.   ObjectValueDict := TObjectValueDictionary.Create([doOwnsValues]);
  15.   ObjectKeyValueDict := TObjectKeyValueDictionary.Create([doOwnsKeys, doOwnsValues]);
  16. end;
« Poslední změna: 23-01-2019, 20:55:22 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1652
  • Karma: 65
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Oprava:

Slovy kodu (klice nebo hodnoty se budou uvolnovat s konstruktorem dictionary):

melo znit:

Slovy kodu (vlastnene instance objektu klice nebo hodnoty se budou uvolnovat s odstranenim polozek z dictionary):


Omlouvam se za zmatek...
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: