2

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

4

1 回答 1

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

'entry_date'将匹配/entry\d?/没有\zor $

于 2013-04-22T15:30:27.820 回答