2

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でのキーは、キーと値の両方ではなく、ハッシュのキーのみを見ているためです。

4

1 に答える 1

2
hash.count{|k, _| k =~ /\Aentry\d?\z/}

'entry_date'or/entry\d?/なしで一致します。\z$

于 2013-04-22T15:30:27.820 に答える