我有一个哈希值,它是 .map
的结果MySQL2::Result 对象上的方法如下所示:
{#<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 格式)吗?
谢谢
最佳答案
我认为你的问题是 Enumerable#map
没有按照你的想法去做。这:
hash_name = @available_items.map do
|h| {h["tdate"] => h["items"] }
end
将为您提供一个单条目哈希值的数组,各个哈希值会将日期映射到字符串,但结果如下所示:
[
{ date1 => string1 },
{ date2 => string2 },
...
]
而不是:
{
date1 => string1,
date2 => string2,
...
}
如你所料。切换到 #each_with_object
应该可以解决您的问题:
hash_name = @available_items.each_with_object({}) do |row, h|
h[row['tdate']] = row['items']
end
关于mysql - Ruby 使用日期作为 MySQL 哈希中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154283/