通过ruby将CSV输入到哈希比从哈希中选择相同的值

时间:2014-01-27 06:22:13

标签: ruby csv hash compare

我最近在学习Ruby,我想知道我是否可以通过ruby输入CSV到哈希(每行是哈希),而不是从每个哈希中选择相同的值,如果有任何值匹配,则打印所有相同值的键。

test.csv

  

person_name,birth_place

     

Mary,Indiana

     

约翰,芝加哥

     

肖恩,印第安纳

     

杰森,纽约

     

莫妮卡,芝加哥

ruby​​代码(尚未完成)

require 'csv' 
input_file = ARGV[0]
hash = {}
CSV.foreach(input_file, headers: true) do |row|
  row.each do |line|
    person_name, birth_place = line.chomp.split(",")
    hash[person_name] = birth_place
  end
end

结果应如下所示:

  

[{Indiana => “玛丽”,“肖恩”},   {芝加哥=> “约翰”,“莫妮卡”}]

任何建议或型号? 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您似乎不需要CSV

hash = {}
input_file = ARGV[0]
File.new(input_file).readlines.each { |line|
  next if line =~ /birth_place/ # ignore headers
  name, bp = line.chomp.split(',')
  (hash[bp] ||= []) << name # create an array if it does not exist yet
}

puts hash


# ⇒ {"Indiana"=>["Mary", "Sean"], "Chicago"=>["John", "Monica"], "New york"=>["Jason"]}

希望它有所帮助。