我有一个哈希,其中包含类似于 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 的回答有效,因为 in 的下划线hash.count{|k, _| k =~ /\Aentry\d?\z/}
表示虽然闭包需要第二个参数,但它不会被赋值。
我可能会继续使用,hash.keys.count{|k| k =~ /\Aentry\d?\z/ }
因为这对我来说更容易理解。这里的关键是key's
现在您只查看哈希的键而不是键和值的部分。