我有一个hash,它是mysql2::result对象上的.map方法的结果,如下所示:
{#<Date: 2018-01-02 ((2458121j,0s,0n),+0s,2299161j)>=>"OL,BD,DM,WW,DG"}{#<Date: 2018-01-03 ((2458122j,0s,0n),+0s,2299161j)>=>"KP,LW"}{#<Date: 2018-01-04 ((2458123j,0s,0n),+0s,2299161j)>=>"LW,WW,FS,DG"}{#<Date: 2018-01-05 ((2458124j,0s,0n),+0s,2299161j)>=>"OL,KP,BD,SB,LW,DM,AS,WW,FS,DG"}{#<Date: 2018-01-06 ((2458125j,0s,0n),+0s,2299161j)>=>"OL,KP,BD,SB,LW,DM,AS,WW,FS,DG"}
我想通过用键引用从散列中提取值(两个字母的项)。
我试过了

puts hash_name["2018-01-06"]
puts hash_name['2018-01-06']
puts hash_name[Date.new(2018,1,6)]
puts hash_name["<Date: 2018-01-06 ((2458125j,0s,0n),+0s,2299161j)>"]
puts hash_name["#<Date: 2018-01-06 ((2458125j,0s,0n),+0s,2299161j)>"]

全部不返回任何内容或错误。
通过执行以下操作创建哈希:
hash_name = @available_items.map do
|h| {h["tdate"] => h["items"] }
end

在创建散列的过程中,或者现在,我可以做些什么来轻松地使用例如,我可以将它转换成其他日期格式,如iso格式吗?
谢谢

最佳答案

这里很接近,但生成的是散列数组,而不是单个散列:

hash_name = @available_items.map do |i|
  [ i["tdate"], i["items"] ]
end.to_h

这将创建一个键/值对数组数组数组,然后使用.to_h方法将它们转换为散列。
如果您的输入数据可以整齐地分组,您也可以使用group_by,例如:
hash_name = @available_items.group_by do |i|
  i['tdate']
end

如果能够处理输出格式,这种方法可能足够好。它是由日期决定的。
注意,使用符号键如:tdate:items通常比字符串键更可取。在大多数情况下,如果没有这些弦的大量重复,就值得尝试朝着这个方向前进。

关于mysql - Ruby使用日期作为MySQL哈希中的键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48154283/

10-10 13:59