使用.map在Ruby中创建多个没有分隔符的数组

时间:2019-04-26 16:08:52

标签: arrays ruby hash hashmap nokogiri

我正在使用Nokogiri从HTML文档中的HTML表中提取数据。

document = Nokogiri::HTML(File.open("webpage.html"))
tables = document.search('table')
table = tables.first # first table in the document

document.at('table').search('tr').each do |row|
    cells = row.search('th, td').map { |cell| cell.text.strip }.values_at(0, 2) #select first and second column value
end

当我映射提取的文本时,它会创建许多没有分隔符的数组(打印输出):

["1972", "$5,500.00"]["1973", "$5,600.00"]["1974", "$6,600.00"]["1975", "$7,400.00"]["1976", "$8,300.00"]["1977", "$9,300.00"]["1978", "$10,400.00"]

我的目标是要有一个像这样的哈希:

{"1972" => "$5,500.00", "1973" => "$5,600.00", "1974" => "$6,600.00", "1975" => "$7,400.00", "1976" => "$8,300.00", "1977" => "$9,300.00", "1978" => "$10,400.00"}

如果我使用地图迭代器创建嵌套数组,则应该可以处理,但是我要做的是创建没有分隔符(逗号)的多个数组。

非常感谢您的帮助,因为我什至不知道该如何称呼我收到的输出:

print cells

或者,如何将这些没有分隔符的多个数组转换为我想要的哈希格式?

1 个答案:

答案 0 :(得分:1)

您实际上并不是在映射结果,而是在迭代和丢弃它们。也许你是说:

data = document.at('table').search('tr').map do |row|
  row.search('th, td').map { |cell| cell.text.strip }.values_at(0, 2).to_h
end

什么将返回数组中每行一个哈希。