0

値が整数と配列で構成される配列であるハッシュに要素を繰り返し割り当てています。私の現在の戦略のおもちゃの例はこれです (配列の最初の要素をインクリメントし、配列の 2 番目の要素に数値をプッシュします):

aHash = Hash.new([0, []])

[1,3,5,1,1].each do |x|
  aHash[x] = [aHash[x][0] + 1, aHash[x][1] << x]
end

aHash # => {1=>[3, [1, 3, 5, 1, 1]], 3=>[1, [1, 3, 5, 1, 1]], 5=>[1, [1, 3, 5, 1, 1]]}

ループの増分部分は機能しているように見えますが、各配列の追加は機能していません。目的のハッシュは次のようになります。

aHash # => {1=>[3, [1, 1, 1]], 3=>[1, [3]], 5=>[1, [5]]}

私も試しました:

[1,3,5,1,1].each do |x|
  aHash[x] = [aHash.values_at(x)[0][0] + 1, aHash.values_at(x)[0][1] << x]
end

aHash # => {1=>[3, [1, 3, 5, 1, 1]], 3=>[1, [1, 3, 5, 1, 1]], 5=>[1, [1, 3, 5, 1, 1]]}

しかし、これと同じ間違った結果を得ています。

そうは言っても、私の質問は次のとおりです。

  1. それが私の問題であると仮定して、このハッシュを適切に初期化するにはどうすればよいですか、そうでない場合は...
  2. ハッシュ値の最初の要素を適切にインクリメントし、ハッシュ値の 2 番目の要素を追加しますか?
4

2 に答える 2