Szybkie sortowanie TStringList

0

Jak najszybciej posortować TStringList zawierające około 1 mln wartości ?

//sl to TStringList
sl.Sorted := True;

Działa bardzo powoli.

dodanie znacznika <code class="delphi"> - fp

1

Jeżeli na pewno potrzebujesz listę napisów to nic nie wskórasz. Z tym że na 99% potrzebujesz czegoś innego.

0

Ładuje kolego z pliku dużo danych do sl i sortuje to w nieskończoność :( Plik tekstowy zwykłe dane np.

tata
mama
i tych linii jest około 1 mln

0

Na pewno:

tata
mama

czy może jednak lista liczb?

0

stringi jako liczby
01 02 03 04 05
01 02 03 04 06

aż do 850668 kombinacji
ale mogą być powtórzenia i stąd chce je posortować

0

Jaka jest maksymalna liczba?

0

42

0

Ale chodzi o sortowanie wierszy np.

01 02 03 04 05
12 22 23 41 42
01 02 03 04 05

nie liczb, więc powinno być

01 02 03 04 05
01 02 03 04 05
12 22 23 41 42

0

Wypróbuj ten unit http://www.hjkm.dk/wp-content/uploads/2012/08/FastSortStringlist.txt według autora jest szybszy od

TStringlist.Sorted:= true

.

0

Zamieniasz na reprezentacje bitową czyli 01 - to pierwszy bit liczby, 02 - drugi, itp
Sortujesz liczby (co będzie jakieś 10 razy szybsze).
Wyświetlasz za pomocą VirtualStringTree - kolejne 10 razy szybciej.
Właściwie wąskim gardłem będzie wczytanie pliku.

1
kAzek napisał(a):

Wypróbuj ten unit http://www.hjkm.dk/wp-content/uploads/2012/08/FastSortStringlist.txt według autora jest szybszy od

TStringlist.Sorted:= true

.

TStringList używa do sortowania QuickSort więc nie wiem czy będzie coś dużo szybciej.

Pytanie nr 1 czy Sorted = True ustawiasz na początku czy po wczytaniu całej listy?

0

Dokładnie ten unit o wiele szybciej sortuje aniżeli typowy sorter w STringList.

FastSortStList(sl);
sl.Sorted := True;
sl.Duplicates := dupIgnore;
sl.Text := sl.Text

A teraz gdy chce usunąć duplikaty to i tak po tym muszę wykonać sl.Sorted := True, dlaczego nie wystarczy :

FastSortStList(sl);
//sl.Sorted := True;
sl.Duplicates := dupIgnore;
sl.Text := sl.Text
0

Nie wystarczy dlatego że zajmowanie się duplikatami jest zbyt czasochłonne przy braku sortowania.
Więc jeżeli Sorted nie jest ustawiony na True kontrolka nawet nie sprawdza właściwość Duplicates.

1 użytkowników online, w tym zalogowanych: 0, gości: 1