我有一个散列将有条目类似于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
部分,因为现在您只查看散列键而不是键和值。
我使用红宝石1.8.7(2010-12-23 patchlevel 330)[i386-mingw32] – 2013-04-22 15:40:24
我没有弄清楚这一点,但信用反而去了我的一个朋友。 – 2013-04-22 18:43:28