Ruby 如何对已分组的哈希进行分组?

Ruby 如何对已分组的哈希进行分组?,ruby,hash,Ruby,Hash,我有一组字符串,我将其转换为哈希,按字符串的大小分组。我是这样做的: hash = set.group_by(&:size) 导致 hash = {5=>[apple, andys, throw, balls], 7=>[bananas, oranges]} 我想按第一个字母对哈希值进行进一步分组,因此最终结果如下所示: hash = {5=>{a=>[apple, andys],b=>[balls],t=>[throw]}, 7=>{b=&

我有一组字符串,我将其转换为哈希,按字符串的大小分组。我是这样做的:

hash = set.group_by(&:size)
导致

hash = {5=>[apple, andys, throw, balls], 7=>[bananas, oranges]}
我想按第一个字母对哈希值进行进一步分组,因此最终结果如下所示:

hash = {5=>{a=>[apple, andys],b=>[balls],t=>[throw]}, 7=>{b=>[bananas], o=>[oranges]}}
我试着把

hash.each_value do | value |
  value = value.group_by(&:chr)
end

在第一个
group_by
之后,但这似乎只返回原始散列。我承认我是一个ruby初学者,所以我不确定我是否能一下子做到这一点,或者如果我被要求写出来,
(&:size)
符号是如何工作的。想法?

要更新哈希,您需要这样做

hash.each do |key, value|
  hash[key] = value.group_by(&:chr)
end

我会保持整个计算功能正常:

>> Hash[set.group_by(&:size).map { |k, vs| [k, vs.group_by(&:chr)] }]
=> {5=>{"a"=>["apple", "andys"], "t"=>["throw"], "b"=>["balls"]}, 
    7=>{"b"=>["bananas"], "o"=>["oranges"]}}