如何对已经分组的哈希进行子组化?

时间:2012-09-25 02:32:39

标签: 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=>[bananas], o=>[oranges]}}

我尝试了

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

在第一个group_by之后,但似乎只返回原始哈希值。我当然是一个红宝石初学者,所以我不确定我是否可以一举做到这一点,或者如果我被要求写出来的话,我的确如此(&:size)符号是如何工作的。想法?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我会保持整个计算功能:

>> 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"]}}