Показать сообщение отдельно
  #2  
Старый 11.12.2013, 22:30
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Daryll
Почему то сортирует столбец с числами вот так:
Получается:
100
110
150
20
250

А нужно:
20
100
110
150
250

Помогите разобраться.
Потому что это не числа, а строки. Эти классы так и называются TStringGrid и TStringList, а не TNumberGrid и TNumberList. А с точки зрения строк он сортирует правильно. Т.е. Численно 20<150, но для строк '20'>'150', так как сравнение строк идёт посимвольно, а не по численному значению.

У класса TStringList есть метод CustomSort в котором можно указать своё правило сортировки - в данном случае просто преобразуем строки в число и сравниваем.

Пример:
Код:
function NumberSort(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := StrToInt(List[Index1]) - StrToInt(List[Index2]); 
end;  

procedure TForm1.Button1Click(Sender: TObject);
var
  MyList: TStringList;
begin
  MyList:=TStringList.Create;
  try
    MyList.Add('150');
    MyList.Add('100');
    MyList.Add('20');
    MyList.Add('250');
    MyList.Add('110');

    MyList.CustomSort(NumberSort);
    
    ShowMessage(MyList.Text);
  finally
    MyList.Free;
  end;
end;
Ответить с цитированием