我最近在学习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 => “玛丽”,“肖恩”}, {芝加哥=> “约翰”,“莫妮卡”}]
任何建议或型号? 感谢您的帮助。
答案 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"]}
希望它有所帮助。