にしもと.blog

色々してます。

Rubyでtsvファイルをhashに収める

最初はこれだった

def file_to_hash(file_name=ARGV[0])
    file = File.open(file_name,"r")
    hash = Hash.new()
    file.each do |line|
        line.chomp!
        hash[line.split("\t")[0]] = line.split("\t")[1]
    end
    file.close
    return hash
end

start_time = Time.now
hash = file_to_hash(ARGV[0])
p "take time is  #{Time.now - start_time}s"

ただ最近ひらめいて

def file_to_hash(filename)
    file = File.open(filename,"r")
    arr1 = file.read.split(/\n|\t/)
    file.close
    return Hash[*arr1]
end
start_time = Time.now
h = file_to_hash(ARGV[0])
p "処理概要 #{Time.now - start_time}s"

に変えた

結果として100万行処理するのに15秒かかる処理が2秒で終わった。はやっ。