我正在使用紅寶石將大型TXT文件加載到數組或散列中。輸入文件包含超過1'000'000個MD5散列值,按字母順序排序,無重複。Ruby Hashes vs. Arrays:找到一件物品的最快方法?
什麼是Ruby中最快的方法,以查明某個散列值是否存在於我的數組或散列中?目前我使用數組和「include?」。
def loadhashlist
@all_hash_values = Array.new
f = File.readlines("inputmd5.txt").each do |row|
@all_hash_values.push(row.gsub("\n",""))
end
end
loadhashlist
def hashlookup(file)
md5 = file.getMd5
if @all_hash_values.include? md5
#code goes here
end
end
除了答案,您還可以使用'@all_hash_values = File.foreach(「inputmd5.txt」)清理負載。 row.chomp}'。 'File#foreach'返回一個'Enumerator',然後'Enumerator#map'將根據塊中的返回值返回一個新的'Array','String#chomp'將刪除尾隨的新行字符。現在,您正在使用'File#readlines'創建'Array',以將值放入另一個'Array'('@ all_hash_values'),這也會對性能產生影響。 – engineersmnky
@engineersmnky謝謝你幫我解決這個問題!巨大的差異!用10'000'000行加載inputmd5.txt,過去需要大約40秒。使用你的代碼,我在9秒內完成! – Roman77