没有使用正则表达式查找哈希键值

时间:2013-04-22 15:25:33

标签: ruby regex hash

我有一个哈希,其条目类似于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部分,因为现在您只查看哈希的键而不是键和值。

1 个答案:

答案 0 :(得分:2)

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

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