TStrings各行に数値を入れ順に並べていくには

解決


るるとん@K  2004-01-17 17:22:55  No: 6773

タイトルでは分かりにくいですが
例えば
2,5,4,1,6
のような内容を
1,2,4,5,6
にする方法です(カンマ=#13#10)
扱う数値は1024までで、とんでるところもあります
宜しくお願いしますです


jok  2004-01-17 20:32:42  No: 6774

TStringList にコピーして CustomSort でソートしてから、再び Assign() で
戻す。


るるとん@K  2004-01-17 23:29:23  No: 6775

すみません、サンプルソースがあればお願いします


jok  2004-01-18 00:04:23  No: 6776

Memo1.Lines は TStrings なのでこれを対象にして

function StringListValueCompare(List: TStringList; Index1, Index2: Integer): Integer;
var
  Value1,Value2:integer;
begin
  Value1 := StrToInt(List[Index1]);
  Value2 := StrToInt(List[Index2]);
  if Value1 = Value2 then
    result := 0
  else
  if Value1 > Value2 then
    result := 1
  else
    result := -1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SL:TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Assign(Memo1.Lines);
    SL.CustomSort(StringListValueCompare);
    Memo1.Lines.Assign(SL);
  finally
    SL.Free;
  end;
end;


るるとん@K  2004-01-18 01:23:50  No: 6777

有り難うございます。試してみます。


るるとん@K  2004-01-21 03:24:06  No: 6778

すみません、よく分かりません
StringListValueCompareの実パラメータは何でしょうか?


jok  2004-01-21 03:28:50  No: 6779

> すみません、よく分かりません

わかる分からないはともかく、実行はできましたか?

> StringListValueCompareの実パラメータは何でしょうか?

実パラメータってなんですか? CustomSort() から呼ばれているので
ユーザは関係ないのでは? 

クイックソートのアルゴリズムを勉強してください。


るるとん@K  2004-01-21 04:28:08  No: 6780

function StringListValueCompare(List: TStringList; Index1, Index2: Integer): Integer;
は正確にはTMain.がいるのでしょうか?


るるといん@K  2004-01-21 04:30:08  No: 6781

すみません、
TMain.はフォームのことです


るるとん@K  2004-01-21 04:30:31  No: 6782

すみません
名前ミス


rulton`K  2004-01-21 04:34:14  No: 6783

実行できません
[エラー] Unit1.pas(50): 型に互換性がありません : 通常の手続きとメソッドポインタ


るるとん@K  2004-01-21 04:43:50  No: 6784

わかりました
StringListValueCompareは宣言しなくて良いんですね


jok  2004-01-21 06:11:13  No: 6785

> StringListValueCompareは宣言しなくて良いんですね

メソッドにしては駄目です。他人のコードを試すときは
<そのまま>で実行してください。


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

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






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