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

解決


るるとん@K  2004-01-17 17:22:55  No: 6773  IP: [192.*.*.*]

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

編集    削除
jok  2004-01-17 20:32:42  No: 6774  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-01-17 23:29:23  No: 6775  IP: [192.*.*.*]

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

編集    削除
jok  2004-01-18 00:04:23  No: 6776  IP: [192.*.*.*]

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  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-01-21 03:24:06  No: 6778  IP: [192.*.*.*]

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

編集    削除
jok  2004-01-21 03:28:50  No: 6779  IP: [192.*.*.*]

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

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

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

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

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

編集    削除
るるとん@K  2004-01-21 04:28:08  No: 6780  IP: [192.*.*.*]

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

編集    削除
るるといん@K  2004-01-21 04:30:08  No: 6781  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-01-21 04:30:31  No: 6782  IP: [192.*.*.*]

すみません
名前ミス

編集    削除
rulton`K  2004-01-21 04:34:14  No: 6783  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-01-21 04:43:50  No: 6784  IP: [192.*.*.*]

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

編集    削除
jok  2004-01-21 06:11:13  No: 6785  IP: [192.*.*.*]

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

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

編集    削除