我有一个MySQL2 :: Result对象@available_items
和
@available_items.each do |row| puts row.values.join("\t ") end
给我一些看起来像这样的东西:
+------------+--------------+----------------------------------+ | tdate | whatDay | items | +------------+--------------+----------------------------------+ | 2018-01-02 | Tuesday | OL,BD,DM,WW,DG | | 2018-01-03 | Wednesday | KP,LW | | 2018-01-04 | Thursday | LW,WW,FS,DG | | 2018-01-05 | Friday | OL,KP,BD,SB,LW,DM,AS,WW,FS,DG | | 2018-01-06 | Saturday | OL,KP,BD,SB,LW,DM,AS,WW,FS,DG | +------------+--------------+----------------------------------+
嗯,实际上它看起来像其他东西,但希望你能得到这个想法。
我知道默认的MySQL2结果输出是一个哈希值,但我无法弄清楚如何通过引用第1列中的日期来引用第3列中的项目(即使用tdate
作为key
将items
设为value
。)
所以我创造了一些,感觉就像,#34;脏"使用pluck方法创建数组的代码
@available_items.each do |row|
@available_array[0] = @available_items.pluck("tdate")
@available_array[1] = @available_items.pluck("whatDay")
@available_array[2] = @available_items.pluck("items")
end
现在我有一个数组,我可以通过引用数组来调用,但我真正想要的是hash
其中tdate
是键,items
是值,所以对于任何给定日期,我可以随机从items
中的逗号分隔列表中拉出一个(缩写的)项目,并将该单个项目放入新的哈希值(伪代码)中,然后使用某些哈希值检查该哈希值其他代码。
@final_list = hash.new()
@final_list[:tdate] = items(randomSelection)
如果我尝试按如下方式创建哈希:
@available_hash = Hash.new()
@available_items.each do |row|
@keyis = @available_items.pluck("tdate")
@valueis = @available_items.pluck("available")
@available_hash[@keyis] = @valueis
end
然后再做
@available_hash.each_with_index do |k, v| puts "#{k} : #{v}" end
我明白了:
[[#<Date: 2018-01-02 ((2458121j,0s,0n),+0s,2299161j)>, #<Date: 2018-01-03 ((2458122j,0s,0n),+0s,2299161j)>, #<Date: 2018-01-04 ((2458123j,0s,0n),+0s,2299161j)>, #<Date: 2018-01-05 ((2458124j,0s,0n),+0s,2299161j)>, #<Date: 2018-01-06 ((2458125j,0s,0n),+0s,2299161j)>], nil] : 0
看起来它刚刚把所有东西都送到了一行。
我有一种感觉,我试图过于复杂,而且我误解了如何附加到哈希。
所以问题是:如何为每个{key,value}
事物看起来像{tdate: items}
创建一个哈希值,每个日期都有一对新事件。
提前致谢。
答案 0 :(得分:0)
试试这个。
@available_hash = @available_items.map{|item| [item["date"], item["items"]] }.to_h
希望这有帮助。
答案 1 :(得分:0)
将其添加为比隐藏在评论中更明显的答案:
@available_hash = @available_items.map do |h| {h["tdate"] => h["available"] } end