喫茶XRAYトップページ

[スレッド全体
]

[7289] Re6:StringList ソートの速さ比べ返信 削除
2014/3/1 (土) 16:12:20 taki
▼ Mr.XRAYさん
▼ たてぐやさん

こんな感じでプログラムできそうです。

http://mrxray.on.coocan.jp/Halbow/Notes/N023.html
[整数値を記憶させる]も参考にしました。


procedure TForm1.Button7Click(Sender: TObject);
var
  i,ix:integer;
  s:string;
  ItemCode,ItemName:string;
begin

  Randomize;
  listBox1.Clear;           // StringGrid役のデータとみなして下さい
  listBox2.Clear;           // クエリー役 本来はStringList
  listBox2.Sorted := true;  // 常にソートされる設定
  listBox3.Clear;           // 結果の確認表示用

  // データが100回追加される処理をしたことに
  for i := 1 to 100 do begin
    // 商品コード番号をランダムに発生
    ItemCode := FormatCurr('000000',Random(1000000));
   // 確認できるように名前の一部に組み込む
    ItemName := 'Item' + FormatCurr('000',i) + '-A';

    // listBox1の最後にデータが追加され、そのIndexがixに入る
    ix := listBox1.Items.Add(ItemCode + ' ' + ItemName + ' @500円');

    // クエリー役のlistBox2にKeyのコード番号とIndexのixを追加する
    // 追加と同時にソートされる
    listBox2.Items.AddObject(ItemCode,TObject(ix));
  end;

  // コード番号順にソートされたデータを取り出す
  for i := 0 to ListBox2.Items.Count - 1 do begin
    ix := integer(ListBox2.Items.Objects[i]);   // Indexを取り出す

    s := ListBox1.Items.Strings[ix];   // StringGrid役からデータを取り出す

    // ここで商品コード毎の集計処理などをする
    listBox3.Items.Append(s);    // 確認のためにListBox3に書き出す
  end;

end;


実行結果です。

ListBox1は商品コードはランダムです。ListBox2が昇順にソートされています。
ListBox3はListBox2と同じ並びになっているのがわかります。
ハイライトは同じデータです。


[7290] Re7:StringList ソートの速さ比べ返信 削除
2014/3/1 (土) 22:32:34 taki
>  listBox2.Items.AddObject(ItemCode,TObject(ix));

ItemCodeはいいけど、TObject(ix)はlistBox2.Items.SaveToFileで
保存されないみたいですね。

残念!


[7291] Re8:StringList ソートの速さ比べ返信 削除
2014/3/2 (日) 15:28:56 taki
StringList.Sorted := true;
で StringList.Addすると重複データが弾かれるみたいです。

しかし、
StringList.Sorted := true;
StringList.Duplicates := dupAccept;  // 重複を許可する
で StringList.Addすると重複データもソートされていました。

どうやら初期の設定は
StringList.Duplicates := dupIgnore;  // 無視
のようです。
StringList.Duplicates := dupError; とすると、
重複データがAddされた時に例外処理ができるそうです。

先は長い。


[7300] Re9:StringList ソートの速さ比べ返信 削除
2014/3/4 (火) 23:37:26 Mr.XRAY
▼ takiさん

> 先は長い。

がんばれ,がんばれ !! takiさ〜ん.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82