Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: d:soft - Gennaio 03, 2023, 12:07:35 pm

Titolo: TFPObjectHashTable
Inserito da: d:soft - Gennaio 03, 2023, 12:07:35 pm
Salve a tutti,

Sto usando l'oggetto TFPObjectHashTable per la notevole velocita' nella ricerca di una chiave e non ho avuto problemi per l'add degli item. So che le tabelle hash possono avere bucket vuoti e non hanno alcun ordinamento, ma ho comunque bisogno di estrarre gli oggetti legati ad ogni chiave per alimentare delle tabelle di un db SQlite.
Non riesco pero' a usare il metodo Iterate per accedere ed estrarre gli oggetti, qualcuno ha fatto esperienza con le tabelle hash della unit contnrs ?
Grazie mille

Win: 7 / 64
Lazarus ver: 2.0.10
FPC: 3.2.0
Titolo: Re:TFPObjectHashTable
Inserito da: nomorelogic - Gennaio 03, 2023, 01:00:27 pm
hai già provato con la proprietà Items?

Edit:
se hai modo prova anche https://wiki.freepascal.org/AVL_Tree (https://wiki.freepascal.org/AVL_Tree)
tempo fa ho fatto delle prove di velocità e sono risultati velocissimi
Titolo: Re:TFPObjectHashTable
Inserito da: d:soft - Gennaio 03, 2023, 03:52:34 pm
Grazie della risposta. Ho visto la proprietà Items ma come indice chiede una stringa cioè la chiave della coppia e non l'indice numerico del bucket. Se capisco bene il metodo coinvolto nell'iterazione sulla tabella è Iterate. È che non so come dichiarare la funzione di callback che dovrebbe tornare i valori di ogni singolo oggetto. L' help a riguardo purtroppo non ha esempi concreti a cui ispirarsi...anche solo un'imbeccata con un pezzetto di sorgente sarebbe gradito.

Per l'uso di componenti avl_tree ci guarderò di sicuro. Grazie del suggerimento. È che ho esperienza pregressa in Delphi. In mie applicazioni avevo fatto uso di ObjectDictionary e sto cercando di "convertirmi" a Lazarus.
Titolo: Re:TFPObjectHashTable
Inserito da: DragoRosso - Gennaio 03, 2023, 04:04:03 pm
Se intendi qualcosa così:

Codice: [Seleziona]
var
  HashListPointer: specialize TDictionary<string, pointer>;
  HashEl: specialize TPair<string, pointer>;

  begin
    HashListPointer.Add('one', ....);
    ........
    ........
   
    for HashEl in HashListPointer do
      begin
         HashEl.Key  ?????;
         HashEl.Value ?????;
      end;
  end;
Titolo: Re:TFPObjectHashTable
Inserito da: nomorelogic - Gennaio 03, 2023, 06:39:39 pm
giusto per farsi un po' l'idea...

https://www.benibela.de/fpc-map-benchmark_en.html (https://www.benibela.de/fpc-map-benchmark_en.html)

ci sono alcune liste (vedi soprattutto 3rd party) che sono molto interessanti