我想檢查散列是否有包含某些文本的鍵。它可能不是確切的關鍵,但關鍵必須包含(如.include?
)文本。我的解決方案是:檢查散列是否有包含一些文本的鍵
some_hash.select {|k,v| k.include? "foo"}.empty?
但是,這將生成一個更多的散列。我只是想檢查鑰匙的存在。有沒有更好的方法來做到這一點?
我想檢查散列是否有包含某些文本的鍵。它可能不是確切的關鍵,但關鍵必須包含(如.include?
)文本。我的解決方案是:檢查散列是否有包含一些文本的鍵
some_hash.select {|k,v| k.include? "foo"}.empty?
但是,這將生成一個更多的散列。我只是想檢查鑰匙的存在。有沒有更好的方法來做到這一點?
這將是一個更好一點:
some_hash.any? {|k, v| k.include? "foo"}
(「?確實哈希有包括‘富’的任何鍵」對我來說這讀作)
或者,這可以效率較低,但實際上效率更高一些(請參閱評論),也許更易讀:
some_hash.keys.any? {|k| k.include? "foo"}
some_hash.any? {|k,v| k.include? "foo"}
some_hash.keys.any? {|k| k.include? 'foo' }
真棒!謝謝! –
你的中間一個不工作,因爲它將一個鍵/值數組分配給「key」,然後你得到Array.include ?,而不是String.include?,它不會進行部分匹配。一個快速的時間檢查表明,你最後的方式,我同意更可讀,也比你的第一種方式稍快。 –
@glenn mcdonald:啊!這將是一個k/v陣列是我的第一本能,但由於一個幸運的事故我的測試案例工作:)編輯,謝謝/ + 1! – jtbandes