mysql - Ruby 使用日期作为 MySQL 哈希中的键

标签 mysql ruby date hash

我有一个哈希值,它是 .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/

相关文章:

mysql - 如何返回查询中完全匹配的总数?

php - 带下一个/上一个按钮的下拉菜单 php

c# - Mysql规范化?或者其他方式?

jquery - rails : How to get Jquery to update a database column after a click

php - 日期时间字段 - MySQL 和 PHP

mysql - 从 MySql 中仅选择年份

php - 从 MySQL 表中过滤重复行

ruby - 在 ruby​​ 中交错两个枚举的最佳方法?

ruby - 如何使用 Ruby 和 Nokogiri 解析 Google 图片 URL?

java - Groovy 中的日期格式