Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Gennaio 10, 2022, 11:53:52 am

Titolo: TList / TFPList
Inserito da: bonmario - Gennaio 10, 2022, 11:53:52 am
Ciao a tutti,
ho fatto il mio primo progetto in cui uso una TFPList per salvare ed ordinare un elenco di dati.
Fino a ieri, per fare questi lavori, ho sempre sfruttato le TStringList.
C'è solo una cosa che facevo prima, e mi sembra di non vedere nelle TFPList: con le TStringList, posso dichiarare la lista come "sorted", e da quel momento in poi, gli elementi che aggiungo con la Add, vengono inseriti "già ordinati".
Se non ho capito male, questa possibilità non c'è con le TList/TFPList: devo inserire gli elementi, ed eventualmente ordinarli nel momento in cui mi serve. E' effettivamente così?

Grazie, Mario
Titolo: Re:TList / TFPList
Inserito da: nomorelogic - Gennaio 10, 2022, 12:18:58 pm
per fare questo devi usare AvlTree
fai riferimento a questa pagina
https://wiki.freepascal.org/AVL_Tree (https://wiki.freepascal.org/AVL_Tree)
l'ordinamento è garantito dalla funzione che devi passare nel momento della create

in pratica nel momento in cui inserisci un elemento, la lista è già in ordine

è stabile, funziona bene ed è pure performante
si tratta delle stesse strutture che usano i database per tenere i risultati delle query in memoria...
Titolo: Re:TList / TFPList
Inserito da: bonmario - Gennaio 10, 2022, 12:21:21 pm
Grazie, appena riesco gli do un occhio
Titolo: Re:TList / TFPList
Inserito da: DragoRosso - Gennaio 10, 2022, 12:27:13 pm
TList è un array generico di puntatori, non ha conoscenza di cosa vuole dire "ordinamento".

TStringList, invece contiene una lista (chiamiamolo impropriamente array) di "string". In questo caso può esistere il concetto di ordinamento.

Vorrei però fare quello che rompe a priori ...... cosa vuol dire ordinamento ?

Se ho due stringhe con il carattere ALPHA in greco e con il carattere A in Inglese ... quale viene prima ?

 :o ??? ::)  ;D 
Titolo: Re:TList / TFPList
Inserito da: nomorelogic - Gennaio 10, 2022, 12:39:33 pm
è per questo che è meglio usare gli AvlTree: il costruttore vuole una funzione che si occupi dell'ordinamento
quindi il problema degli accenti e/o case è tutta una responsabilità della funzione
Titolo: Re:TList / TFPList
Inserito da: bonmario - Gennaio 10, 2022, 12:47:09 pm

Se ho due stringhe con il carattere ALPHA in greco e con il carattere A in Inglese ... quale viene prima ?

Se non ricordo male, sia con le TStringList che con le TList/TFPList, puoi dichiarare una procedura da usare per il confronto, dove scegliere cosa fare

Ciao, Mario
Titolo: Re:TList / TFPList
Inserito da: bonmario - Gennaio 10, 2022, 07:59:53 pm
per fare questo devi usare AvlTree
fai riferimento a questa pagina
https://wiki.freepascal.org/AVL_Tree (https://wiki.freepascal.org/AVL_Tree)
l'ordinamento è garantito dalla funzione che devi passare nel momento della create

in pratica nel momento in cui inserisci un elemento, la lista è già in ordine

è stabile, funziona bene ed è pure performante
si tratta delle stesse strutture che usano i database per tenere i risultati delle query in memoria...

Spettacolare ... era proprio quello che mi serviva, grazie !

Ciao, Mario