Bagaimana memeriksa apakah kunci tertentu ada dalam hash atau tidak?


636

Saya ingin memeriksa apakah kunci "pengguna" ada atau tidak di hash sesi. Bagaimana saya bisa melakukan ini?

Perhatikan bahwa saya tidak ingin memeriksa apakah nilai kunci nihil atau tidak. Saya hanya ingin memeriksa apakah kunci "pengguna" ada.

Jawaban:


952

Hash's key?metode memberitahu Anda apakah kunci yang diberikan hadir atau tidak.

session.key?("user")

nice: accessor "string" bekerja untuk objek yang diuraikan JSON.parse juga :)
Bijan

2
Ini tidak berfungsi untuk saya, metode: pengguna bekerja sebagai gantinya
Akash Agarwal

295

Sementara Hash#has_key?menyelesaikan pekerjaan, seperti yang dicatat Matz di sini , itu sudah tidak digunakan lagi Hash#key?.

hash.key?(some_key)

1
Referensi yang bagus untuk permintaan perubahan itu dan tanggapan selanjutnya dari Matz.
Joshua Pinter

Adakah yang tahu pasti?
codeforester


28

Sangat terlambat tetapi sebaiknya simbol digunakan sebagai kunci:

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 

Tetapi ketika membuat hash jika Anda melewatkan string sebagai kunci maka itu akan mencari string dalam kunci.

Tetapi ketika membuat hash Anda melewati simbol sebagai kunci lalu has_key? akan mencari kunci dengan menggunakan simbol.


Jika Anda menggunakan Rails, Anda dapat menggunakannya Hash#with_indifferent_accessuntuk menghindari ini; keduanya hash[:my_key]dan hash["my_key"]akan menunjuk ke catatan yang sama


6
Jika Anda menggunakan Rails, Anda dapat menggunakannya Hash#with_indifferent_accessuntuk menghindari ini; keduanya :my_keydan "my_key"akan menunjuk ke catatan yang sama
Devon Parsons

5

Anda selalu dapat menggunakan Hash#key?untuk memeriksa apakah kunci hadir dalam hash atau tidak.

Jika tidak, itu akan mengembalikan Anda false

hash =  { one: 1, two:2 }

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

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

3

Cara lain ada di sini

hash = {one: 1, two: 2}

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

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

0

Di Rails 5, has_key? Metode memeriksa apakah kunci ada di hash. Sintaks yang digunakan adalah:

YourHash.has_key? :yourkey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.