我创建了以下哈希键,其值从PDF解析为数组:
columns = ["Sen", "P-Hire#", "Emp#", "DOH", "Last", "First"]
h = Hash[columns.map.with_index.to_h]
=> {"Sen"=>0, "P-Hire#"=>1, "Emp#"=>2, "DOH"=>3, "Last"=>4, "First"=>5}
现在我想用另一个解析数据数组中的6个等效值更新每个键的值:
rows = list.text.scan(/^.+/)
row = rows[0].tr(',', '')
@data = row.split
=> ["2", "6", "239", "05/05/67", "Harp", "Erin"]
我可以在视图中迭代@data,它将列出6个值中的每一个。当我尝试在控制器中执行相同操作时,它为每个键设置相同的值:
data.each do |e|
h.update(h){|key,v1| (e) }
end
=>
{"Sen"=>"Harper", "P-Hire#"=>"Harper", "Emp#"=>"Harper", "DOH"=>"Harper", "Last"=>"Harper", "First"=>"Harper"
所以它将每个键的值设置为循环数组的最后一个值...
答案 0 :(得分:3)
我会这样做:
h.keys.zip(@data).to_h
如果h
的唯一目的是作为获得结果的临时步骤,您可以免除它并执行:
columns.zip(@data).to_h
答案 1 :(得分:1)
有几种方法可以解决这个问题,但更直接,更直接的方法是:
columns = ["Sen", "P-Hire#", "Emp#", "DOH", "Last", "First"]
...
@data = row.split
h = Hash.new
columns.each_with_index do |column, index|
h[column] = @data[index]
end
另一种方式:
h.each do |key, index|
h[key] = @data[index]
end
就像我说的,有几种方法可以解决这个问题,最好的方法总是取决于你想要达到的目标。