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

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

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



답변

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

session.key?("user")


답변

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

hash.key?(some_key)


답변

최신 Ruby 버전에서 해시 인스턴스에는 다음과 같은 key?방법이 있습니다.

{a: 1}.key?(:a)
=> true

해시의 내용에 따라 기호 키 또는 문자열 키를 사용해야합니다.

{'a' => 2}.key?(:a)
=> false


답변

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

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"]동일한 레코드를 가리 킵니다


답변

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

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

hash =  { one: 1, two:2 }

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

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


답변

다른 방법은 여기

hash = {one: 1, two: 2}

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

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


답변

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

YourHash.has_key? :yourkey