2011-08-18 6 views
5

해시에 텍스트가 포함 된 키가 있는지 확인하고 싶습니다. 정확한 키가 아닐 수도 있지만 키에는 텍스트 (예 : .include?)가 들어 있어야합니다. 이에 대한 내 해결책은 다음과 같습니다.해시에 텍스트가 포함 된 키가 있는지 확인하십시오.

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

그러나 이렇게하면 해시가 하나 더 생성됩니다. 열쇠의 존재를 확인하고 싶습니다. 그렇게 할 수있는 더 좋은 방법이 있습니까?

답변

10

이 조금 더 좋은 것 : ("? 해시가 '갑'를 포함 모든 키가 않습니다"로이 읽기 나에게)

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

또한,이 을 할 수있다 덜 효율적일 수도 있지만,은 실제로 좀 더 효율적입니다 (의견보기 참조). 아마도 조금 더 읽기 쉽습니다 :

+0

굉장! 감사! –

+1

키/값 배열을 "key"에 할당하면 가운데 하나가 작동하지 않습니다. 그런 다음 부분 일치를 수행하지 않는 Array.include?가 아닌 String.include?가 나타납니다. 빠른 타이밍 검사는 내가 동의하는 마지막 방법이 더 읽기 쉽다는 것을 나타내며, 첫 번째 방법보다 약간 빠릅니다. –

+0

@ 글렌 맥도널드 : 아! 그것은 k/v 배열이 내 첫 번째 본능 이었지만, 행복한 사고로 인해서 나의 테스트 케이스가 작동했다 :) 편집, 감사/+ 1! – jtbandes

0

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

5
some_hash.keys.any? {|k| k.include? 'foo' } 
관련 문제