entry1、entry2 などのようなエントリを持つハッシュがあり、それらが何回出現するかを数えようとしていますが、entry_hello のようなエントリもあります。したがって、それらが何回表示されるかを数えようとすると、「entry_hello」もカウントされます。各エントリが一致するかどうかを確認するために、ここにこのコードがありますが、これは期待どおりに機能しません。
hash = {}
hash['entry'] = 'Test1'
hash['entry_date'] = 'Test2'
hash['entry2'] = 'Test3'
hash.each do |x|
puts x.to_s.scan(/entry\d?$/).count
end
ただし、この場合は何も見つかりませんが$
、「entry_hello」がないとカウントされます。文字列で試してみましたが、これは機能しますが、ハッシュキーで試してみると機能しません。なぜ機能しないのかわかりません。これを機能させる方法や、これを行う別の方法を知りたいです。
更新:気になる人のために:私のコードが機能しなかった理由はx
、この場合はキーと値のペアであったため、x
「entry」または「entry2」と等しくなく、代わりに「entryTest1」または「entry2Test3」と等しくなったためです。
hash.count{|k, _| k =~ /\Aentry\d?\z/}
アンダースコアのアンダースコアは、クロージャーが2番目の引数を取りますが、値が割り当てられないことを示すためのものであるため、Sawaの答えは機能します。
hash.keys.count{|k| k =~ /\Aentry\d?\z/ }
これは私にとってより理解しやすいので、おそらく先に進んで使用するつもりです。ここkey's
でのキーは、キーと値の両方ではなく、ハッシュのキーのみを見ているためです。