我有一个散列,它是 .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格式吗?
谢谢
4条答案
按热度按时间um6iljoc1#
显然hashMap不适合作为日期的键,hashMap更适合作为id、tag等键,它应该是唯一的键。
请提供更多关于您需要如何处理此哈希Map的信息,以确保您可以拥有更聪明的数据结构。
如果有一个包含两个键(tdate、items)的数组,并且要查找日期,请使用select:
日期类中“==”运算符的引用http://ruby-doc.org/stdlib-2.1.1/libdoc/date/rdoc/date.html#method-i-3d-3d-3d
fslejnso2#
希望这能帮助其他人做类似的事情,下面是我最后做的。
我有一个mysql2::result对象,如上图所示,我在其上运行:
曾宣布
start_date
和一个end_date
然后,我从列表中随机选择一个可用项,以使用日期作为键填充新哈希:虽然我相信可能有一个更优雅的方式来做这件事,我很高兴你帮助我得到这个工作!
vwhgwdsa3#
我想你的问题是
Enumerable#map
不是你想的那样。这是:将为您提供一个单条目哈希数组,各个哈希将日期Map到字符串,但结果如下所示:
而不是:
如你所料。切换到
#each_with_object
你应该解决你的问题:fivyi3re4#
你很接近这里,但是你正在生成一个散列数组,而不是一个单数散列:
这将创建一个键/值对数组数组,然后使用
.to_h
方法。你也可以使用
group_by
如果您的输入数据可以整齐地分组,例如:如果您可以处理输出格式,那么这种方法就足够了。它是按日期键入的。
请注意,使用符号键
:tdate
以及:items
通常优于字符串键。值得一试的是,在大多数情况下,如果不是这样的话,这些弦就会大量重复出现。