Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: AndreaM - Dicembre 28, 2017, 08:52:46 am

Titolo: [Risolto] TstringList e proprietà Sorted
Inserito da: AndreaM - Dicembre 28, 2017, 08:52:46 am
Buongiorno a tutti e AUGURI!
Stò usando il componente TStringList per memorizzare un elenco di circa 300.000 parole, e mi serve tutta la velocità della procedura Find, che però funziona solo per una lista ordinata. Visto che questa lista viene salvata su di un file, e che una volta ordinata non viene variata, vorrei far capire al componente che il file che viene caricato è già ordinato e non è necessario un nuovo ordinamento che richiede molti secondi di tempo. La proprietà Sorted se impostata a true dopo LoadFromFile, procede comunque ad un ordinamento (non necessario)! Bisognerebbe impostare sorted:=true ma senza ordinamento :)
C'è un modo per risolvere il problema?
Grazie a tutti.
Andrea.
Titolo: Re:TstringList e proprietà Sorted
Inserito da: xinyiman - Dicembre 28, 2017, 09:25:13 am
Che io sappia no. Però scusa se sai di caricarla già ordinata scriviti tu la funzione di find. Si tratta poi di un while con un uscita condizionata! Secondo me fai prima a fare così.
Titolo: Re:TstringList e proprietà Sorted
Inserito da: bonmario - Dicembre 28, 2017, 09:35:08 am
Non ho mai avuto a che fare con liste con così tanti elementi, ma io di solito la dichiaro così:

Codice: [Seleziona]
  ListaOrdinata:=TStringList.Create; ListaOrdinata.Sorted:=True; ListaOrdinata.Duplicates:=dupIgnore;
  try
    ListaOrdinata.LoadFromFile('C:\Pippo.txt');
  finally
    PulisciLista(ListaOrdinata, tpFree);
  end;

Naturalmente, vedi tu se "Duplicates" va bene impostato a "dupIgnore" o meno.

Quando carichi la lista, dovrebbe fare l'ordinamento alla lettura di ogni riga, con conseguente inserimento di essa nella lista, ma visto che la lista sul file di testo è già ordinata, questo non dovrebbe portare via troppo tempo all'esecuzione.

Ciao, Mario
Titolo: Re:TstringList e proprietà Sorted
Inserito da: AndreaM - Dicembre 28, 2017, 11:28:57 am
Urca è vero....
Non avevo pensat di fare una mia funzione....
Che poi l'ho presa dal componente TstringList e gli ho tolto il controllo sorted=true! e poche altre modifiche...
Risolto con poca fatica.
Grazie