我需要将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"
有更简单的方法吗?
答案 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?
。