![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка в StringGrid
Turbid © (2004-07-19 13:25:00)Есть ли у кого алгоритм см.Сабж
ALS (2004-07-19 13:48:00) [1]>>Сортировка в StringGrid
Сортировка по 1 или 2 столбцам
procedure DoSortStrGrid(SG: TStringGrid; NCol,NCol2: integer);
var TGD: TStringGrid;
Lst: TStringList;
NRCnt, NRFix: integer;
i: integer;
begin
if (NCol < 0)
or (NCol >= SG.ColCount)
or ((NCol2 >= 0) and (NCol2 >= SG.ColCount)) then
Raise(Exception.Create('Sorting grid: column index is out of range'));
TGD := TStringGrid.Create(Application);
try
NRCnt := SG.RowCount;
NRFix := SG.FixedRows;
TGD.ColCount := SG.ColCount;
TGD.RowCount := NRCnt;
TGD.FixedRows := NRFix;
TGD.Row := SG.Row;
for i := 0 to SG.ColCount-1 do TGD.Cols[i].Assign(SG.Cols[i]);
Lst := TStringList.Create;
try
Lst.Sorted := False;
Lst.Assign(SG.Cols[NCol]);
for i := 0 to NRFix-1 do Lst.Delete(i);
if (NCol2 >= 0)
and (NCol2 <> NCol) then
for i := 0 to NRCnt-1-NRFix do
Lst[i] := Lst[i] + ' ' + SG.Cells[NCol2, i+NRFix];
for i := 0 to Lst.Count-1 do Lst.Objects[i] := pointer(i+NRFix);
Lst.Sort;
for i := 0 to SG.ColCount-1 do SG.Cols[i].Clear;
for i := 0 to NRFix-1 do
SG.Rows[i].Assign(TGD.Rows[i]);
for i := NRFix to NRCnt-1 do
begin
SG.Rows[i].Assign(TGD.Rows[integer(Lst.Objects[i-NRFix])]);
if integer(Lst.Objects[i-NRFix]) = TGD.Row then SG.Row := i
end
finally
Lst.Free;
end
finally
TGD.Free
end
end;
Думкин (2004-07-19 13:40:00) [2]И вообще, я в Стрингриде данные не храню, я его только для визуалки использую, а сами данные которые сортировать - в своем классе сидят.
Думкин (2004-07-19 13:39:00) [3]> [3] Turbid © (19.07.04 13:36)
А что именно вызывает затруднения? Все сказано в
> 1] VMcL © (19.07.04 13:27).
Единственное, что можно - это предложить слегка измененный вариант быстрой сортировки, который сортирует чуть быстрее.
Turbid (2004-07-19 13:36:00) [4]
> Думкин © (19.07.04 13:28) [2]
> Да, есть. Сабж смотрю. :(
Дык поделись коль не жадный
Думкин (2004-07-19 13:28:00) [5]Да, есть. Сабж смотрю. :(
VMcL (2004-07-19 13:27:00) [6]>>Turbid © (19.07.04 13:25)
Посмотри TStringList.Sort() в исходниках VCL - там пример "быстрой сортировки".