특정 키가 해시에 있는지 여부를 확인하는 방법은 무엇입니까?


636

"사용자"키가 세션 해시에 있는지 여부를 확인하고 싶습니다. 어떻게해야합니까?

키의 값이 nil인지 여부를 확인하고 싶지 않습니다. "사용자" 가 있는지 확인하고 싶습니다 .

답변:


952

Hashkey?방법은 주어진 키가 있는지 여부를 알려줍니다.

session.key?("user")

nice : "string"접근자는 JSON.parse 파싱 된 객체에서도 작동합니다 :)
Bijan

2
이것은 나를 위해 작동하지 않습니다 : : user 메소드가 대신 작동했습니다
Akash Agarwal

295

Hash#has_key?Matz가 여기 에서 언급 한 것처럼 작업을 수행 하는 동안 이 기능은 더 이상 사용되지 않습니다 Hash#key?.

hash.key?(some_key)

1
그 변경 요청과 Matz의 후속 응답에 대한 좋은 참조.
Joshua Pinter

아무도 확실히 알고 있습니까?
codeforester


28

매우 늦었지만 기호로 키를 사용해야합니다.

my_hash = {}
my_hash[:my_key] = 'value'

my_hash.has_key?("my_key")
 => false 
my_hash.has_key?("my_key".to_sym)
 => true 

my_hash2 = {}
my_hash2['my_key'] = 'value'

my_hash2.has_key?("my_key")
 => true 
my_hash2.has_key?("my_key".to_sym)
 => false 

그러나 문자열을 키로 전달하면 해시를 만들 때 키에서 문자열을 검색합니다.

그러나 해시를 만들 때 symbol을 key로 전달한 다음 has_key? 기호를 사용하여 키를 검색합니다.


Rails를 사용한다면 Hash#with_indifferent_access이것을 피하기 위해 사용할 수 있습니다 . 모두 hash[:my_key]hash["my_key"]동일한 레코드를 가리 킵니다


6
Rails를 사용한다면 Hash#with_indifferent_access이것을 피하기 위해 사용할 수 있습니다 . 모두 :my_key"my_key"동일한 레코드를 가리 킵니다
데본 파슨스

5

항상 Hash#key?키가 해시에 있는지 여부를 확인 하는 데 사용할 수 있습니다 .

그렇지 않으면 그것은 당신을 반환합니다 false

hash =  { one: 1, two:2 }

hash.key?(:one)
#=> true

hash.key?(:four)
#=> false

3

다른 방법은 여기

hash = {one: 1, two: 2}

hash.member?(:one)
#=> true

hash.member?(:five)
#=> false

0

Rails 5에서 has_key? 메소드는 키가 해시에 있는지 확인합니다. 사용하는 구문은 다음과 같습니다.

YourHash.has_key? :yourkey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.