配列を昇順するには?

解決


会升  2007-05-16 18:56:38  No: 26141

いつもお世話になっております。
早速ですが質問させていただきます。

wk_Curr : array[1..10] of String;

for i := 1 to 10 do
begin
  wk_Curr[i] := TEdit(FindComponent('Edit' + IntToStr(i))).Text;
end;

上記のような配列を昇順に並び替え、再びエディットに表示するというものです。
何か適当な関数、方法などありましたらご教授願います。

よろしくお願いします。


Basser  2007-05-16 19:30:37  No: 26142

TStringListのSortを利用した方が楽なのでは?


会升  2007-05-16 22:47:44  No: 26143

>>Basser様
ご返答ありがとうございます。

TStringListを使い方がよく分からなかったのですが何とかソースを組みました・・・が、TStringListのSortを使用すると文字列のソート順になってしまいました。

しかし、金額をソートしたいのです。言葉足らずで申し訳ございませんでした。

配列では昇順にソートする関数などはやはりないのでしょうか?
引き続き皆様のお知恵をお貸しください。

よろしくお願いします。


Basser  2007-05-16 23:29:21  No: 26144

そのような場合はTStringList.CustomSortを使用します。
下記が例です

// 金額比較用
function PriceCompare(List: TStringList; Index1, Index2: Integer): Integer;
var
  C1, C2: Currency;
begin
  C1:= StrToCurr(List[Index1]);
  C2:= StrToCurr(List[Index2]);

  if C1 < C2 then Result:= -1 else
  if C1 > C2 then Result:=  1 else Result:= 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Buffer: TStringList;
  Edits : TList;
  I: Integer;
begin

  Edits := TList.Create;
  Buffer:= TStringList.Create;
  try
    for I:= 1 to 10 do
    begin
      Edits.Add(FindComponent('Edit' + IntToStr(I)));
      Buffer.Add(TEdit(Edits[Edits.Count - 1]).Text);
    end;

    Buffer.CustomSort(PriceCompare);

    for I:= 0 to Buffer.Count - 1 do
      TEdit(Edits[I]).Text:= Buffer[I];
  finally
    Buffer.Free;
    Edits.Free;
  end;
end;


会升  2007-05-17 01:50:17  No: 26145

>>Basser様
ご丁寧な返信ありがとうございます。
Basser様のソースを参考にさせて頂き解決しました。

ご教授ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加