String#include?
方法は便利ですが、あなたは(計算上)最も効率的な方法について尋ねる場合は、接頭辞と接尾辞木を提供triez宝石(gem install triez
)を使用shoud。例:
file = <<~TEXT
lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
TEXT
lines = file.split "\n"
require 'triez' # if necessary, gem install triez
t = Triez.new
lines.each_with_index { |line, line_number|
t.change_all(:suffix, line) { line_number }
}
あなたはあなたのリストにすべての単語を反復処理し、非常に効率的に彼らが発生するライン上で見つけることができます:ところで
words = %w[lorem dolor elit foobar]
words.each do |word|
t.search_with_prefix word do |suffix, line_number|
position = lines[line_number].size - suffix.size - word.size
puts "'#{word} occurs on line #{line_number}, position #{position}"
end
end
#=> 'lorem occurs on line 0, position 0
#=> 'dolor occurs on line 0, position 12
#=> 'dolor occurs on line 3, position 13
#=> 'elit occurs on line 1, position 23
。 Web検索エンジンがWebページをダウンロードした後に最初に行うことは、その接尾辞ツリーを構築することです。文字列検索のための別の宝石はfast_trieです。
これはRubyの質問ですので、擬似コードの代わりにRubyコードを投稿することができますか? – Stefan
IPアドレスをファイルに入れ、 'grep -F -f ip_addresses log_file' – Stefan
さらに詳しい情報が必要です。このファイルはRAMに保存されていますか?繰り返しタスクですか、ワンショットタスクですか? –