0

文字列のサイズでグループ化されたハッシュに変換する一連の単語文字列があります。私はこれをやっています:

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)書き出すように頼まれた場合、これを一挙にできるかどうか、または表記法がどのように機能するかはわかりません。考え?

4

2 に答える 2

2

ハッシュを更新するには、次のようにする必要があります

hash.each do |key, value|
  hash[key] = value.group_by(&:chr)
end
于 2012-09-25T02:45:11.310 に答える
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"]}}
于 2012-09-25T08:10:10.450 に答える