Показать сообщение отдельно
  #5  
Старый 01.06.2012, 08:24
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от gamezeldol
Примерная функция сортировки выглядит так:
Код:
function mySort(List: TStringList; first, second: Integer): integer; // это функция сортировки
  function f(index: integer): integer;
  begin result := StrToInt(List.Strings[index]) end;
  begin
  result :=f(second) - f(first);
end;

begin
  ts := TStringList.Create;
  try
   with StringGrid1 do
     ts.
      begin
        ts.Assign(cols[1]); // Получаем элементы очередной строки
        ts.CustomSort(mySort); // сортируем их как числа по убыванию
        Cols[1].Assign(ts); // возвращаем назад в Грид
      end;
  finally
    ts.Free;
  end;
СПАСИБО за внимание.
А где в твоей примерной функции сортировки есть сравнение значений? Слышал что-нибудь о таком методе сортировке как сортировка пузырьком? Так вот здесь он вполне применим. В качестве пузырька у нас будет строка в StringGrid, которую мы специально добавим чтобы через нее менять значение строк местами.
Код:
procedure TFormGeneral.BtnSortingClick(Sender: TObject);
var
  I, J, CntRow, Val1, Val2: Integer;
begin
  StringGrid.RowCount := StringGrid.RowCount + 1;
  CntRow := StringGrid.RowCount;
  for J := 1 to CntRow - 1 do
  for I := 1 to CntRow - 1 do
    begin
      Val1 := StrToIntDef(StringGrid.Cells[1, I], 0);
      Val2 := StrToIntDef(StringGrid.Cells[1, J], 0);
      if Val1 < Val2 then
      with StringGrid do
      begin
        Rows[CntRow] := Rows[i];
        Rows[i] := Rows[J];
        Rows[J] := Rows[CntRow];
      end;
    end;
  StringGrid.RowCount := StringGrid.RowCount - 1;
end;

P.S.: в данном случае сортировка по убыванию. Чтобы получить сортировку по возрастанию нужно чуть-чуть доработать код. А что бы его доработать нужно понять что тут к чему. Учиться, учиться и еще раз учиться
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием