【问题标题】:Select specific key from hash in Ruby从Ruby中的哈希中选择特定键
【发布时间】:2017-05-12 11:09:18
【问题描述】:

我将以下 JSON 转换为哈希:

<%
  json = '{
    "speed": 50,
    "braking": 50,
    "time_on_task": 50
  }'
  json = JSON.parse(json)
%>

目前我只是遍历它们并显示它们:

<ul>
  <% json.each do |t| %>
      <li><%= "<b>#{t.first.humanize}</b>: #{t.last}".html_safe %></li>
  <% end %>
</ul>

但是,我想构建一个可以通过键名选择特定项目的方法。例如show_score(json, 'speed')

我试过了:

def show_score(hash, key)
  hash.select { |k| k == key }
end

刚刚返回:{"speed"=&gt;50}

所以我尝试了:

hash.select { |k, h| "&lt;b&gt;#{k.humanize}&lt;/b&gt;: #{h}".html_safe if k == key }

但它返回相同的......

如果键匹配,我如何才能以我想要的格式返回字符串?

【问题讨论】:

  • 你不需要一个方法来实现它..它们就像 hash[:key]

标签: json ruby ruby-hash


【解决方案1】:
def show_score(hash, key)
  "<b>#{key.humanize}</b>: #{hash[key]}"
end

我会改变这个

<%
  json = '{
    "speed": 50,
    "braking": 50,
    "time_on_task": 50
  }'
  json = JSON.parse(json)
%>

进入

<%
  hash = {
    "speed" => 50,
    "braking" => 50,
    "time_on_task" => 50
  }
  json = hash.to_json
%>

【讨论】:

  • 这样做只会在执行json['speed'] 时返回50 如何通过传递密钥来打印我想要的字符串?
【解决方案2】:

我认为你想太多了,或者我没有完全理解你的问题。

<ul>
  <% json.each do |k,v| %>
      <li><%= "<b>#{k.humanize}</b>: #{v}".html_safe %></li>
  <% end %>
</ul>

ps。使用Enumerable#detectEnumerable#select.first 快很多

【讨论】:

    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2017-01-16
    相关资源
    最近更新 更多