除非值为真,否则将散列展平为字符串
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(' ')
我需要将 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(' ')