除非值为真,否则将散列展平为字符串

Flattening hash into string unless value is true

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

例如

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"

有没有更简单的方法?

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

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

使用v == true

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