我有一个哈希,其条目类似于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'。
Sawa的回答是有效的,因为hash.count{|k, _| k =~ /\Aentry\d?\z/}
中的下划线意味着当闭包采用第二个参数时,它不会被赋值。
我可能会继续使用hash.keys.count{|k| k =~ /\Aentry\d?\z/ }
,因为这对我来说更容易理解。这里的关键是key's
部分,因为现在您只查看哈希的键而不是键和值。
答案 0 :(得分:2)
hash.count{|k, _| k =~ /\Aentry\d?\z/}
'entry_date'
将与/entry\d?/
或\z
匹配$
。