【问题标题】:How to effectively find a value in a Ruby hash? [closed]如何有效地在 Ruby 哈希中找到一个值? [关闭]
【发布时间】:2013-09-29 19:59:21
【问题描述】:

我正在使用以下格式的哈希:

{2013-09-19 11:37:18 UTC=>10.780000000000001, 2013-09-21 11:37:18 UTC=>2.55, 2013-09-23 08:42:25 UTC=>2.55}

然后我有一个循环,其中我有这种格式的日期值 2013-09-21。我正在尝试根据日期值在哈希中找到一个值。

这是我正在尝试的:

%div "#{@data1.select{|key, hash| key.strftime('yyyy-MM-dd').to_s == day.to_s }}"
%div "#{@data2.select{|key, hash| key.to_s == day.to_s }}"

但在这两种情况下,我都会得到一个空数组。一种方法是遍历整个哈希并比较值,但这可能不是在哈希中查找项目的有效方法。

我正在尝试上面的select方法,但不知道如何正确使用。

【问题讨论】:

    标签: ruby-on-rails ruby hash null key


    【解决方案1】:

    如果dayString,试试

    @data1.select{|key, hash| key.strftime('%Y-%m-%d') == day}
    

    如果dayDate 对象,请尝试

    @data1.select{|key, hash| key.to_date == day}
    

    返回所选键的值

    @data1.select{|key, hash| key.to_date == day}.values.first
    

    【讨论】:

    • 很好,它正在工作,谢谢。但输出格式为:{2013-09-19 11:37:18 UTC=>10.780000000000001}。如何只打印出价值?
    • @tihom,最后使用.values 而不是[1],以防选择产生超过一个键/值对
    • 谢谢..更新了答案
    【解决方案2】:

    问题在于您将 DateTime 与 Date 进行比较(考虑到两者的格式)。

    所以,你可以这样做:

    %div "#{@data1.select{|key, hash| key.to_date.to_s == day.to_s }}"
    %div "#{@data2.select{|key, hash| key.to_date.to_s == day.to_s }}"
    

    【讨论】:

      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多