我有一个这样的哈希:
hash = {
'en-us': {
where: 'USA'
},
'en-us-zone2': {
where: 'USA'
},
'en-nl': {
where: 'Netherlands'
},
'en-pt': {
where: 'Portugal'
},
}
我试着用group_by
对它们进行分组:
result = hash.group_by { |k,v| v[:where] }
但是,它返回的是完整的数组,而不是哈希数组。以下是预期和实际结果:
实际结果:
{ "USA"=>
[[:"en-us", {:where=>"USA"}], [:"en-us-zone2", {:where=>"USA"}]],
"Netherlands"=>
[[:"en-nl", {:where=>"Netherlands"}]],
"Portugal"=>
[[:"en-pt", {:where=>"Portugal"}]]
}
预期效果:
{ "USA"=>
[{:"en-us" => {:where=>"USA"}}, {:"en-us-zone2" => {:where=>"USA"}}]
"Netherlands"=>
[{:"en-nl" => {:where=>"Netherlands"}}]
"Portugal"=>
[{:"en-pt" => {:where=>"Portugal"}}]
}
实际是数组的数组,而不是哈希的数组。哈希键成为第一个数组元素。
如何根据:where
对哈希进行分组?
2条答案
按热度按时间alen0pnh1#
这应该是可行的:
或者使用transform_values
https://ruby-doc.org/core-2.4.0/Hash.html#method-i-transform_values
t1rydlwq2#
它很丑,但很有效: