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.

Mohit Jain
sumber

Jawaban:

952

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

session.key?("user")
sepp2k
sumber
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)
Bozhidar Batsov
sumber
1
Referensi yang bagus untuk permintaan perubahan itu dan tanggapan selanjutnya dari Matz.
Joshua Pinter
Adakah yang tahu pasti?
codeforester
41

Dalam versi terbaru Ruby Hash instance memiliki key?metode:

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

Pastikan untuk menggunakan kunci simbol atau kunci string tergantung pada apa yang Anda miliki di hash Anda:

{'a' => 2}.key?(:a)
=> false
installero
sumber
2
Tampaknya ada sedini Ruby 1.6: ruby-doc.com/docs/ProgrammingRuby/html/… (mungkin sebelumnya, tidak tahu harus memeriksa di mana)
Beni Cherniavsky-Paskin
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

GB
sumber
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
Deepak Mahakale
sumber
3

Cara lain ada di sini

hash = {one: 1, two: 2}

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

hash.member?(:five)
#=> false
Arvind singh
sumber
0

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

YourHash.has_key? :yourkey
BinaryMan
sumber