我有以下Ruby哈希:
{"limit"=>250, "days_ago"=>14, "days_ago_filter"=>"lt", "key"=>3}
我想将其转换为人类可读的字符串,并根据需要转换某些值:
Limit: 250 - Days Ago: 14 - Days Ago Filter: Less than - Key: D♯, E♭
,
因此,在这种情况下,lt
实际上转换为Less than
。 3
的{{1}}会转换为key
。
我几乎可以做到这一点:
D♯, E♭
但是翻译这些价值观是我遇到的障碍。
答案 0 :(得分:1)
我建议使用散列来映射可能的值,例如:
days_ago_filter_map = {
"lt" => "Less than",
# ...other cases here...
}
musical_key_map = {
3 => "D♯, E♭",
# ...other cases here...
}
然后您可以打开key
:
variables.map do |key, value|
label = "#{key.split('_').map(&:capitalize).join(' ')}"
formatted_value = case key
when "days_ago_filter" then days_ago_filter_map.fetch(value)
when "key" then musical_key_map.fetch(value)
else value
end
"#{label}: #{formatted_value}"
end.join(' - ')
请注意,如果您的地图上缺少任何内容,则以上代码将引发KeyNotFound
错误。您可以在fetch
中设置默认值,例如
days_ago_filter_map.fetch(value, "Unknown filter")
musical_key_map.fetch(value, "No notes found for that key")
答案 1 :(得分:0)
您也可以为此类映射创建YAML文件:
values_for_replacement = {
"lt" => "Less than",
3 => "D♯, E♭"
}
您可以尝试以下操作:
variables.map {|k,v|
value_to_be_replaced = values_for_replacement[v]
"#{k.humanize}: #{(value_to_be_replaced.present? ? value_to_be_replaced : v)}"}.join(' - ')