我有一个散列,它将有类似entry1、entry2等的条目,我试图计算它们出现的次数,但我也有一个类似entry的条目因此,当我试图计算它们出现的次数时,“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'。
sawa的答案是有效的,因为hash.count{|k, _| k =~ /\Aentry\d?\z/}中的下划线表示闭包接受第二个参数时,它不会被赋值。
我可能会继续使用hash.keys.count{|k| k =~ /\Aentry\d?\z/ },因为这对我来说更容易理解。这里的关键是key's部分,因为现在您只查看散列的键,而不是键和值。

最佳答案

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

'entry_date'将匹配/entry\d?/而不匹配\z$

08-26 08:39