我想要的结果是这样的:
{date: 12/02/2014, minutes: 36}
我正在使用Nokogiri:
dates = doc.css('td:nth-child(3)')
minutes = doc.css('td:nth-child(10)')
然后我做了一些过滤并将结果推送到数组中:
dates.each do |x|
if x.text.length == 10
date_array << x.text
end
end
minutes.each do |x|
minutes_array << x.text
end
如何将这两个阵列压缩在一起以创建我想要的结果?
我已尝试过这样的事情,但事情并不完全正确(给我{&#34; 2013-10-29&#34; =&gt;&#34; 32:14&#34 ;})
result = Hash[date_array.zip(minutes_array)]
甚至是这样的:
result = Hash[date_array.zip(minutes_array).map {|d, m| {:date => d, :minutes => m}}
但我收到此错误:错误的元素类型哈希值为163
我也用.flatten修补但无济于事。有人可以帮忙吗?
答案 0 :(得分:3)
假设你有两个相等长度的数组x和y
x = [:key1, :key2, :key3]
y = [:value1, :value2, :value3]
z = {}
x.each_with_index { |key,index| z[key] = y[index] }
puts z
=> {:key1=>:value1, :key2=>:value2, :key3=>:value3}
是你在寻找什么?
那么也许这就是:x = [:key1, :key2, :key3]
y = [:value1, :value2, :value3]
z = []
x.each_with_index { |key,index| z << { date: key, minutes: y[index]} }
puts z
{:date=>:key1, :minutes=>:value1}
{:date=>:key2, :minutes=>:value2}
{:date=>:key3, :minutes=>:value3}
答案 1 :(得分:2)
从nPn偷窃(我无法评论他的答案,因为我没有声誉)
假设你有
x = [ "date1", "date2", "date3"]
y = [ "time1", "time2", "time3"]
然后你可以这样做:
z = []
x.each_with_index { |k, i| z << { date: k, time: y[i] } }
puts z
=> [ { date: "date1", time: "time1" },
{ date: "date2", time: "time2" },
{ date: "date3", time: "time3" } ]
这是你在找什么?
答案 2 :(得分:1)
您正尝试为多个值设置相同的密钥(日期,分钟)。相反,您可以使用所有这些日期 - 分钟组合的哈希数组,使用此 -
date.zip(minutes).reduce([]) { |memo, combo| memo << Hash[*[:date, :minutes].zip(combo).flatten] }
以下是它的外观 -
2.1.5 :035 > date=["10/10,2010","11/10/2010","12/10/2010","13/10/2010","14/10/2010"]
=> ["10/10,2010", "11/10/2010", "12/10/2010", "13/10/2010", "14/10/2010"]
2.1.5 :036 > minutes = [10,20,30,40,50]
=> [10, 20, 30, 40, 50]
2.1.5 :037 > date.zip(minutes).reduce([]) { |memo, combo| memo << Hash[*[:date, :minutes].zip(combo).flatten] }
=> [{:date=>"10/10,2010", :minutes=>10}, {:date=>"11/10/2010", :minutes=>20}, {:date=>"12/10/2010", :minutes=>30}, {:date=>"13/10/2010", :minutes=>40}, {:date=>"14/10/2010", :minutes=>50}]
2.1.5 :038 >
提醒注意事项 - 您应该使用Struct,然后创建一个Struct实例的数组,而不是像这样处理哈希数组。
答案 3 :(得分:1)
如果
dates = ["12/02/14", "6/03/14"]
minutes = [12, 19]
然后,如果我没有误解这个问题,那就是:
dates.zip(minutes).map { |d,m| {date: d, minutes: m} }
#=> [{:date=>"12/02/14", :minutes=>12}, {:date=>"6/03/14", :minutes=>19}]