(むしろ単にハッシュよりも)単一のハッシュを含む配列が所望される理由は明らかではありません。ハッシュがすべて必要な場合は、コード内の外側の括弧を削除するだけです。
h[:cat] = h[:cat] + 1
h
がキー:cat
を持っている場合は、平等の右側にh[:cat]
は、そのキーの現在の値であり、8
言う:Rubyはh[:cat] += 1
に遭遇すると、それが最初に行うことはにその式を拡張しています。一方
h[:cat] = 8 + 1 #=> 9
を計算h
キー:cat
を持っていない場合、私たちは、その後、右のh[:cat]
がデフォルト値に設定されているので、私たちは最初に、そのため
h[:cat] = 0 + 1 #=> 0
を持っています次のようにステップ私たちは、ハッシュを計算:
g = arr.each_with_object(Hash.new(0)) { |pair, h| h[pair] += 1 }
#=> {["IT", "Testing"]=>3, ["IT", "Banking Software"]=>1, ["IT", "ERP"]=>2,
# ["IT", "IT Security"]=>2, ["Accounting", "Offshore"]=>1, ["Accounting", "ACCA"]=>1}
これは簡単な形式
とほぼ同じである h = {}
arr.each do |pair|
h[pair] = 0 unless h.key?(pair)
h[pair] += 1
end
#=> [["IT", "Testing"], ["IT", "Banking Software"], ["IT", "ERP"],
# ["IT", "Testing"], ["IT", "IT Security"], ["IT", "ERP"],
# ["IT", "IT Security"], ["Accounting", "Offshore"], ["IT", "Testing"],
# ["Accounting", "ACCA"]]
h #=> {["IT", "Testing"]=>3, ["IT", "Banking Software"]=>1, ["IT", "ERP"]=>2,
# ["IT", "IT Security"]=>2,
# ["Accounting", "Offshore"]=>1, ["Accounting", "ACCA"]=>1}
each
は受信者を返しますので、このスニペットがメソッドでラップされている場合は、最後にh
という行が必要です。
第2ステップ(ちょうど計算されたh
を使用)は、以下を実装したことが素晴らしいことでした。等式の右側のh[k]
メソッドHash#[]ある一方h[k] =
は、方法Hash#[]=ため構文糖あること
g = {}
h.each do |k,n|
a, b = k
g[a] = [] unless g.key?(a)
g[a] << [b, n]
end
g # => {"IT"=>[["Testing", 3], ["Banking Software", 1], ["ERP", 2], ["IT Security", 2]],
# "Accounting"=>[["Offshore", 1], ["ACCA", 1]]}
1注意。
「成功なし」とはどういう意味ですか?それは動作しませんでしたか?それはあなたに無効な出力を与えましたか? – Makoto
書かれているように、これは「私のためのコードを書いてください」という質問です。私はあなたが立ち往生した場所を過ぎ去るのを手伝いたいと思っていますが、詳細を分かち書きしなければ助けません。 –