TArray<integer>나, Tarray<string> 으로 되어 있느 배열은 Tarray.sort<integer>(iArray) 과 같은 방법으로 할수 있습니다.
procedure TForm1.Button1Click(Sender: TObject);
var iArray: TArray<string>;
begin
SetLength(iArray, Memo1.Lines.count);
iArray := Memo1.Lines.ToStringArray;
TArray.Sort<string>(iArray);
Memo2.Lines.AddStrings(iArray);
end;
var iArray: TArray<string>;
begin
SetLength(iArray, Memo1.Lines.count);
iArray := Memo1.Lines.ToStringArray;
TArray.Sort<string>(iArray);
Memo2.Lines.AddStrings(iArray);
end;
유사한 방법으로 레코드 형태의 배열이며 특정 필드로 소팅한다면
TBoll = record
count: integer;
name: string;
end;
procedure TForm1.Button2Click(Sender: TObject);
var iArrayBoll: TArray<TBoll>;
begin
SetLength(iArrayBoll, Memo1.Lines.count);
for var idx := low(iArrayBoll) to high(iArrayBoll) do begin
iArrayBoll[idx].count := 0;
iArrayBoll[idx].name := Memo1.Lines[idx];
end;
TArray.Sort<TBoll>(iArrayBoll, TComparer<TBoll>.Construct(
function(const a, b: TBoll): integer
begin
Result := StrToint(a.name)- StrToInt(b.name);
//string 의 경우에는 Result:= CompareText(a.name, b.name);
end));
for var idx := low(iArrayBoll) to High(iArrayBoll) do begin
Memo2.Lines.Add(iArrayBoll[idx].name);
end;
end;
count: integer;
name: string;
end;
procedure TForm1.Button2Click(Sender: TObject);
var iArrayBoll: TArray<TBoll>;
begin
SetLength(iArrayBoll, Memo1.Lines.count);
for var idx := low(iArrayBoll) to high(iArrayBoll) do begin
iArrayBoll[idx].count := 0;
iArrayBoll[idx].name := Memo1.Lines[idx];
end;
TArray.Sort<TBoll>(iArrayBoll, TComparer<TBoll>.Construct(
function(const a, b: TBoll): integer
begin
Result := StrToint(a.name)- StrToInt(b.name);
//string 의 경우에는 Result:= CompareText(a.name, b.name);
end));
for var idx := low(iArrayBoll) to High(iArrayBoll) do begin
Memo2.Lines.Add(iArrayBoll[idx].name);
end;
end;
검색은
procedure TForm1.Button3Click(Sender: TObject);
var
iStr: string;
idx: integer;
begin
iStr := Edit1.Text;
if Tarray.BinarySearch<string>(iArray, iStr, idx) then Button3.Caption:= intToStr(idx);
end;
iStr: string;
idx: integer;
begin
iStr := Edit1.Text;
if Tarray.BinarySearch<string>(iArray, iStr, idx) then Button3.Caption:= intToStr(idx);
end;
댓글 없음:
댓글 쓰기