2011-08-18 96 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' }