掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TStringListで、特定の文字列から開始する行を高速で抜き出す方法 (ID:39837)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になります。1点質問させてください。 1 前提条件 ●StringListに、10000行程度のデータが入っている。 ●StringListはソート済み。 ●この内容は、半角英数の文字データのみです。 (単語補完用の辞書ファイルのデータです。) 2 行いたいこと ●このStringListの中で、特定の文字列から始まる行を抽出したい。 (大/小文字は区別しない) 例えば、aaa, aab, abcというリストがあったとして、検索文字列が aaである場合は、aaaとaabを抜き出すという動作になります。 ※参考までに書いておくと、現在開発中のテキストエディタの単語補完 機能の一部として組み込みます。カーソル位置が変わるごとに頻繁に 抽出処理を行うため、ちょっともっさりするだけでも体感速度に大きな 影響が出てしまいます。 3 これまでに試したこと ●単純に上からAnsiPos (〜) = 0 で判定した処理を組み込みました。 ですが、これだともっさりします。 ●StringListの各行の頭1文字を基準として、二分法(?)的な処理を試しました。 例:検索文字列を「cde」とする。 →StringListの5000行目の頭1文字がHだったとしたら、 検索文字列の頭1文字のcはHよりも前なので、1行目から5000行目 までを処理の対象とする。 →この処理を延々と続けて、範囲を確定する。 多少検索速度は改善したが、もし同じ文字で始まる単語が非常に 多くなった場合、検索速度があまり改善しないケースが出てしまう。 どうすれば抽出処理が早くなるでしょうか。何か、よい手順等をご存知の方 がいらっしゃいましたら、ご助言をいただければと思います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.