Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизСортировка в StringGrid Найти похожие ветки
← →
Turbid © (2004-07-19 13:25) [0]Есть ли у кого алгоритм см.Сабж
← →
VMcL © (2004-07-19 13:27) [1]>>Turbid © (19.07.04 13:25)
Посмотри TStringList.Sort() в исходниках VCL - там пример "быстрой сортировки".
← →
Думкин © (2004-07-19 13:28) [2]Да, есть. Сабж смотрю. :(
← →
Turbid © (2004-07-19 13:36) [3]
> Думкин © (19.07.04 13:28) [2]
> Да, есть. Сабж смотрю. :(
Дык поделись коль не жадный
← →
Думкин © (2004-07-19 13:39) [4]> [3] Turbid © (19.07.04 13:36)
А что именно вызывает затруднения? Все сказано в
> 1] VMcL © (19.07.04 13:27).
Единственное, что можно - это предложить слегка измененный вариант быстрой сортировки, который сортирует чуть быстрее.
← →
Думкин © (2004-07-19 13:40) [5]И вообще, я в Стрингриде данные не храню, я его только для визуалки использую, а сами данные которые сортировать - в своем классе сидят.
← →
ALS (2004-07-19 13:48) [6]>>Сортировка в 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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c