读书人

排序有关问题

发布时间: 2012-02-04 15:43:08 作者: rapoo

排序问题
在一个窗体上放两个edit框,一个button按钮,在edit1框中输入一行数字,数字之间用逗号隔开,按一下button实现排序,把排好序的数字在edit2中输出。




[解决办法]
楼上的复杂了

Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);var  StrList: TStringList;  Str: String;begin  StrList := TStringList.Create;  Str := Trim(Edit1.Text);  Str := SysUtils.StringReplace(Str, ',', #13 + #10, [rfReplaceAll]);  StrList.Text := Str;  StrList.Sort;  Str := StrList.Text;  Str := SysUtils.StringReplace(Str, #13 + #10, ',', [rfReplaceAll]);  Str := Copy(Str, 1, Length(Str) - 1);  Edit2.Text := Str;  StrList.Free;end;
[解决办法]
TStringList的排序时按照字符来排序的,“1,2,12,11”排序的结果会是“1,11,12,2”,不是楼主想要的效果。。。
如果想对整数进行排序,可以利用新版本Delphi中的泛型支持来简化代码代码。。。
Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);var  Str: TStringList;  StrArr: array of Integer;  i: Integer;begin  Str := TStringList.Create;  Str.Delimiter := ',';  Str.DelimitedText := Edit1.Text;  SetLength(StrArr, Str.Count);  for i := 0 to Str.Count - 1 do    StrArr[i] := StrToInt(Str.Strings[i]);  TArray.Sort<Integer>(StrArr);  for i := 0 to Str.Count - 2 do    Edit2.Text := Edit2.Text + IntToStr(StrArr[i]) + ',';  Edit2.Text := Edit2.Text + IntToStr(StrArr[Str.Count - 1]);  Str.Free;end; 

读书人网 >.NET

热点推荐