2011-08-18 7 views
5

ハッシュにテキストが含まれているキーがあるかどうかをチェックします。それは正確なキーではないかもしれませんが、キーには(.include?のように)テキストが含まれている必要があります。私の解決策は次のとおりです。ハッシュに何らかのテキストが含まれているキーがあるかどうか確認してください。

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

しかし、これでもう1つのハッシュが生成されます。私はちょうどキーの存在を確認したい。それを行う良い方法はありますか?

答えて

10

これは少しよりよい次のようになります。

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

は「?ハッシュが 『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' } 
関連する問題