我想删除散列中键值中的空格
output = [
{"first name"=> "george", "country"=>"Australia"},
{"second name"=> "williams", "country"=>"South Africa"},
{"first name"=> "henry", "country"=>"US"}]
我能够管理数组中只有一个哈希,并带有以下代码
Array.wrap({}.tap do |hash|
output.each do |key|
key.each do |k, v|
hash[k.gsub(" ","_")] = v
end
end
end)
请帮我修改包含多个哈希的数组。
注意:输出值是动态的,我们无法对代码中的哈希键进行硬编码。
答案 0 :(得分:1)
如果哈希没有嵌套 - 你可以简单地
for(int i=0; i<1000 && !token.IsCancellationRequested; ++i)
{
...
}
// output log if cancelled
if (token.IsCancellationRequested) Console.WriteLine(...);
答案 1 :(得分:0)
这里的代码将把哈希中每个键的空格更改为下划线:
output.flat_map { |h| h.map { |key, v| { key.gsub(" ", "_") => v } } }
=> [{"first_name"=>"george"}, {"country"=>"Australia"}, {"second_name"=>"williams"}, {"country"=>"South Africa"}, {"first_name"=>"henry"}, {"country"=>"US"}]
答案 2 :(得分:0)
您无法修改哈希的键。您必须删除不需要的密钥并添加新密钥。这是一种在一个步骤中执行这两项操作的方法(请参阅文档Hash#delete):
def convert(h)
h.keys.each { |k| (h[k.tr(' ','_')] = h.delete(k)) if k =~ /\s/ }
h
end
因此:
output.map { |h| convert h }
#=> [{"country"=>"Australia", "first_name"=>"george"},
# {"country"=>"South Africa", "second_name"=>"williams"},
# {"country"=>"US", "first_name"=>"henry"}]
我已经使用方法String#tr将空格转换为下划线,但您也可以使用String#gsub。此外,您可以写k.include?(' ')
而不是k =~ /\s/
。