除非值为true,否则将哈希扁平化为字符串

时间:2017-06-29 09:56:02

标签: ruby string hash string-formatting map-function

我需要将a中的键和值转换为字符串。有时,值为true,在这种情况下,不应打印值,只应输入密钥。

E.g。

opts = {
    "fail_timeout" => "8s",
    "slow_start" => "130s",
    "resolve" => true
}

我是这样做的:

opts_string = opts.map{|k,v| "#{k}"+ (v.is_a?(TrueClass) ? "" : "=#{v}") }.join(' ')
# => "fail_timeout=8s slow_start=130s resolve"

有更简单的方法吗?

3 个答案:

答案 0 :(得分:4)

使用v == true

的一种方法
opts.map { |k,v| v == true ? k : "#{k}=#{v}" }.join(' ')     
#=> "fail_timeout=8s slow_start=130s resolve"

答案 1 :(得分:1)

opts.map{|k, v| v == true ? [k] : [k, v]}
    .map{|tuple| tuple.join('=')}
    .join(' ')

答案 2 :(得分:0)

opts.inject("") { |memo, (k,v)| memo << (v == true ? k : [k,v].join("=")) + " " }.strip

不确定这是否比你的更好,除了相等检查可能是== true而不是is_a?