2011-08-18 99 views
5

我想檢查散列是否有包含某些文本的鍵。它可能不是確切的關鍵,但關鍵必須包含(如.include?)文本。我的解決方案是:檢查散列是否有包含一些文本的鍵

some_hash.select {|k,v| k.include? "foo"}.empty? 

但是,這將生成一個更多的散列。我只是想檢查鑰匙的存在。有沒有更好的方法來做到這一點?

回答

10

這將是一個更好一點:

some_hash.any? {|k, v| k.include? "foo"} 

(「?確實哈希有包括‘富’的任何鍵」對我來說這讀作

或者,這可以效率較低,但實際上效率更高一些(請參閱評論),也許更易讀:

some_hash.keys.any? {|k| k.include? "foo"} 
+0

真棒!謝謝! –

+1

你的中間一個不工作,因爲它將一個鍵/值數組分配給「key」,然後你得到Array.include ?,而不是String.include?,它不會進行部分匹配。一個快速的時間檢查表明,你最後的方式,我同意更可讀,也比你的第一種方式稍快。 –

+0

@glenn mcdonald:啊!這將是一個k/v陣列是我的第一本能,但由於一個幸運的事故我的測試案例工作:)編輯,謝謝/ + 1! – jtbandes

0

some_hash.any? {|k,v| k.include? "foo"}

5
some_hash.keys.any? {|k| k.include? 'foo' }