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

解決


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

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

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

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

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

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

編集 削除
jok  2004-01-17 15: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-17 16:23:50  No: 6777  IP: 192.*.*.*

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

編集 削除
るるとん@K  2004-01-20 18:24:06  No: 6778  IP: 192.*.*.*

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

編集 削除
jok  2004-01-20 18:28:50  No: 6779  IP: 192.*.*.*

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

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

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

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

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

編集 削除
るるとん@K  2004-01-20 19:28:08  No: 6780  IP: 192.*.*.*

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

編集 削除
るるといん@K  2004-01-20 19:30:08  No: 6781  IP: 192.*.*.*

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

編集 削除
るるとん@K  2004-01-20 19:30:31  No: 6782  IP: 192.*.*.*

すみません
名前ミス

編集 削除
rulton`K  2004-01-20 19:34:14  No: 6783  IP: 192.*.*.*

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

編集 削除
るるとん@K  2004-01-20 19:43:50  No: 6784  IP: 192.*.*.*

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

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

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

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

編集 削除