TArray에서와 같은 방법으로 소팅하면 됩니다.
tBoll = record
count: integer;
name: string;
end;
jTempArr: Tarray<tBoll>;
iList: TList<tBoll>
jBoll: tBoll;
iList := TList<TBoll>.Create;
SetLength(jTempArr, 45);
for idx := 0 to 44 do begin
jTempArr[idx].Count := 0;
jTempArr[idx].Name := BollName[idx];
end;
for idx := 0 to 44 do begin
jBoll := jTempArr[idx];
iList.Add(jBoll);
end;
iList.Sort(TComparer<TBoll>.Construct(
function(const Left, Right: TBoll): integer begin
Result := Left.Count - Right.Count;
// Result:= CompareText(Left, Right);
end));
count: integer;
name: string;
end;
jTempArr: Tarray<tBoll>;
iList: TList<tBoll>
jBoll: tBoll;
iList := TList<TBoll>.Create;
SetLength(jTempArr, 45);
for idx := 0 to 44 do begin
jTempArr[idx].Count := 0;
jTempArr[idx].Name := BollName[idx];
end;
for idx := 0 to 44 do begin
jBoll := jTempArr[idx];
iList.Add(jBoll);
end;
iList.Sort(TComparer<TBoll>.Construct(
function(const Left, Right: TBoll): integer begin
Result := Left.Count - Right.Count;
// Result:= CompareText(Left, Right);
end));
와 같은 방법으로 하면 됩니다. 그냥 iList.sort 하였더니 숫자의 자리수가 다르거나 음수가 있으면 잘 안되더군요. 0, -99, 99 이렇게 되어있을 경우 0 이 가장적은 수가되버립니다.
잊어먹지 않기위해 정리하였습니다. 참고로 List 소팅도 정리합니다. (XE)
uses
SysUtils, Generics.Defaults, Generics.Collections;
procedure Sort;
var
List: TList<String>;
AComparer: IComparer<string>;
I: integer;
begin
Randomize;
AComparer:= TDelegatedComparer<string>.create(
function(const Left, Right: String): integer begin
Result:= StrToInt(Left) - StrToInt(Right);
end);
List:= TList<string>.Create(AComparer);
for i := 0 to 9 do
List.Add(IntToStr(Random(1000)));
List.Sort;
// List.Sort(TComparer<string>.Construct(function(const left,right: string):integer begin
// Result:= StrToInt(Left)-StrToInt(Right);
SysUtils, Generics.Defaults, Generics.Collections;
procedure Sort;
var
List: TList<String>;
AComparer: IComparer<string>;
I: integer;
begin
Randomize;
AComparer:= TDelegatedComparer<string>.create(
function(const Left, Right: String): integer begin
Result:= StrToInt(Left) - StrToInt(Right);
end);
List:= TList<string>.Create(AComparer);
for i := 0 to 9 do
List.Add(IntToStr(Random(1000)));
List.Sort;
// List.Sort(TComparer<string>.Construct(function(const left,right: string):integer begin
// Result:= StrToInt(Left)-StrToInt(Right);
// end));
for I := 0 to List.Count-1 do Writeln((List[i]));
List.Free;
end;
for I := 0 to List.Count-1 do Writeln((List[i]));
List.Free;
end;
댓글 없음:
댓글 쓰기