TDictionaryをフィルタリング&ソートするテンミニッツサイトストラテジーサンデーアマグラマーNorimakiの開発日誌。その他Tipsども、Norimakiです。久しぶりにDelphiのお話です。Delphiでデータを扱う際にTDictionaryとかTListなどをよく使います。TDictionaryは検索が効率的だということで、そっちを使いたいんですが、ソートが出来ないという問題にぶち当たります。そもそもTDictionaryはソートするもんじゃないぜ。言われそうですが、それでもソートしたい時ってのがあるわけで。するか?データをTDictionaryに持たせて、順番をTListに持たせる。「順番をTListに持たせる」というのは何か気持ち悪い表現ですが、それはおいておいて、まず、TDictionayのキーをTListに保存するわけですね。for-in-doを使ってキーを抜き出してTListに保存します。ここで、必要に応じてフィルタリングをするのも良いでしょう。TListはソートできますから、ソートの際にはTListのソートをつかうと。TDictionayのキーはどういう型であれ一意ですから、TListとTDictionaryは1対1で対応しています。いうことで、サンプルがこちら。FreeAndNil(Dic);FreeAndNil(MyList);end;DispStatus('');end;こんな感じで。usesに、Generics.Collections,Generics.Defaults,MMSystemを追加して下さい。・SpinEdit2・SpinEdit3・StatusBar1・Memo2コンポーネントを設置して下さい。StatusBar1のSimplePanelプロパティはTrueに設定。SpinEdit2にダミーデータの個数。SpinEdit3にフィルタリングの数。設定数以下の数字を抽出する。いう仕組みになっています。:=SpinEdit2.Value;JudgeCnt:=SpinEdit3.Value;に適当な数字を入れて下さい。テスト的には、LoopCntに1000000、JudgeCntに50をいれてみるといいのではないかと。msecという感じになりました(詳しい環境状況はよくわかりません)。あとは、ジェネリクスを使ったり、ソート・フィルタリング部を分離したりして一般化して使いやすくするとどうかなと。これが使えるかどうか、意味があるかどうかはわかりませんが、こういうやり方もありかなと。Norimakiでした。シェアするツイートフォローするnorimaki関連記事メソッド名(文字列)でメソッドを呼び出す方法ども、Norimakiです。ネットには色々と有益な情報を提供してくれるサイトが多数あります。そんなサイトをNorimaki基準でピックアップしてみました。今回のお役立ち情報はこちら。Delphiのメソッドをメソッド名から実行する...記事を読むストリームにデータを読み書きするども、Norimakiです。データを保存するという場合、ストリームを使用することが多くなります。ストリームに対して行います。いうことで、ストリームに関するデータのやり取りの備忘録をば。記事を読むジェネリクス機能を使ったTListを無名メソッドでソートするにはども、Norimakiです。今回は無名メソッドでのソートについてです。毎回、ハマるので記事にしてみました。必要に応じてソートすると。いう状況を想定しています。記事を読むコンポーネントの初期化処理ども、Norimakiです。今回はコンポーネントの初期化処理を書いてみようかと。コンポーネントの初期化処理というのは、こんな感じです。目的のコンポーネ...記事を読むTDictionaryはどれくらい早いのか?ども、Norimakiです。今回は開発関係のお話です。フィルタリングのスピードが遅いという問題点が発覚しました。面倒臭いことが何よりも大嫌いDelphi(ツール開発環境)の最新バージョンが欲しいけれどもさすがにホイホイと購入できるほど余裕は無いわけで。テンミニッツサイトストラテジー.。