2017-05-12 83 views
0
選擇從哈希特定鍵

我有以下的JSON我轉換成散列:在Ruby中

<% 
    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"=>50}

所以,我想:

hash.select { |k, h| "<b>#{k.humanize}</b>: #{h}".html_safe if k == key }

但它返回相同的...

如何我可以去j如果他們的關鍵匹配,ust以我想要的格式返回字符串?

+0

你不需要爲that..they工作作爲哈希方法[:鍵] –

回答

3
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 
%> 
+0

這樣做,只是返回'50'做'JSON [「速度」]'怎麼辦時,我通過傳遞鍵打印我想要的字符串? – Cameron

1

我想你想得辛苦,也許我不完全理解你的問題我會改變。

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

ps。使用Enumerable#detect是如此之快比Enumerable#select.first