排序问题
在一个窗体上放两个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;