没有找到与正则表达式的哈希键值
我有一个散列将有条目类似于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”计数。我已经尝试过使用字符串,这可以工作,但是当我使用散列键尝试时,它不会。我不明白为什么它不起作用,并且想知道如何让这个工作或另一种方法来做到这一点。
UPDATE: 对于任何人谁在乎:我的代码没有工作的原因是因为x
在这种情况下是键/值对这样x
不等于“项目”或“ENTRY2”,而是相当于“entryTest1 '或'entry2Test3'。
由于下面的hash.count{|k, _| k =~ /\Aentry\d?\z/}
中的下划线代表的是Sawa的答案,它意味着当闭包接受第二个参数时,它不会被赋值。
我可能会继续并使用hash.keys.count{|k| k =~ /\Aentry\d?\z/ }
,因为这对我来说更容易理解。这里的关键是key's
部分,因为现在您只查看散列键而不是键和值。
hash.count{|k, _| k =~ /\Aentry\d?\z/}
'entry_date'
将匹配/entry\d?/
没有\z
或$
。
你能解释为什么问题中的代码不工作吗? – 2013-04-22 15:33:20
谢谢你的解决方案,我也是第二dan1111的问题,为什么我的原始不工作。我认为问题的一部分是使用'$'行尾字符与字符串'\ z'结尾? – 2013-04-22 15:44:08
这里没有区别,但从语义上来说,字符串的结尾比行结束更有意义。 – sawa 2013-04-22 16:00:36
我使用红宝石1.8.7(2010-12-23 patchlevel 330)[i386-mingw32] – 2013-04-22 15:40:24
我没有弄清楚这一点,但信用反而去了我的一个朋友。 – 2013-04-22 18:43:28