Цитата:
Сообщение от 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;