我有一個散列將有條目類似於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