将ruby哈希转换为另一个集合
然后应产生以下结果:将ruby哈希转换为另一个集合,ruby,Ruby,然后应产生以下结果: atts = { key1: "value1", key2: "value2" } 因此,我想创建一个函数,将ATT转换为自定义ATT custom_atts = { "key1" => { string_value: "value1", data_type: "String" }, "key2" => { string_value: "value2", data_type: "Strin
atts = {
key1: "value1",
key2: "value2"
}
因此,我想创建一个函数,将ATT转换为自定义ATT
custom_atts = {
"key1" => {
string_value: "value1",
data_type: "String"
},
"key2" => {
string_value: "value2",
data_type: "String"
}
}
我可以循环使用如下哈希值:
def custom_atts(atts)
end
但不确定如何在循环中创建包含哈希的哈希。尝试以下方法:
h.each do |key, value|
puts key
value.each do |k,v|
puts k
puts v
end
end
如果您的新键应该是字符串而不是符号,那么将
key
更改为key。在地图内部更改为
。您使用map
在Ruby中执行这些操作可能有人被否决,因为atts
的键是符号,但期望的结果是将这些键转换为字符串。。。。这就是最后可选的to_s
的目的;而且,我相信,它是符号还是字符串并不是问这个问题的主要原因喜欢Ruby的表现力,能够做出如此简短的解决方案。是的,没什么大不了的,有一个0票的被接受的答案真是太好了
atts = {
key1: "value1",
key2: "value2"
}
def custom_atts(atts)
Hash[ atts.keys.map { |key|
[ key, {
string_value: atts[key],
data_type: "String" } ] } ]
end
puts custom_atts(atts).inspect
# {:key1=>
# {:string_value=>"value1",
# :data_type=>"String"},
# :key2=>{
# :string_value=>"value2",
# :data_type=>"String"}}
atts.each_with_object({}) { |(k,v),h| h[k.to_s] = { string_value: v, data_type: v.class } }
#=> {"key1"=>{:string_value=>"value1", :data_type=>String},
# "key2"=>{:string_value=>"value2", :data_type=>String}}