Jak sprawdzić, czy dany klucz jest obecny w hashu, czy nie?

Chcę sprawdzić czy klucz "user" jest obecny czy nie w hashu sesji. Jak mogę to zrobić?

Zauważ, że nie chcę sprawdzać, czy wartość klucza jest zerowa, czy nie. Chcę tylko sprawdzić, czy klucz" user " jest obecny.

Author: jaysoifer, 2010-12-25

5 answers

Hash'Metoda S key? mówi, czy dany klucz jest obecny, czy nie.

session.key?("user")
 783
Author: sepp2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 21:32:34

Podczas gdy Hash#has_key? wykonuje zadanie, jak zauważa Matztutaj , zostało ono wycofane na rzecz Hash#key?.

hash.key?(some_key)
 259
Author: Bozhidar Batsov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-12 19:44:53

W najnowszych wersjach Rubiego instancja Hash ma key? "metoda": {]}

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

Upewnij się, że używasz symbolu lub klucza łańcuchowego w zależności od tego, co masz w swoim hashu:

{'a' => 2}.key?(:a)
=> false
 30
Author: installero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-25 18:39:29

Jest bardzo późno, ale najlepiej używać symboli jako klucza:

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 

Ale podczas tworzenia hash jeśli podasz łańcuch jako klucz, to będzie on szukał łańcucha w keys.

Ale podczas tworzenia hasha podajesz symbol jako klucz, a następnie has_key? przeszukuje klucze za pomocą symbolu.


Jeśli używasz Rails, możesz użyć Hash#with_indifferent_access, aby tego uniknąć; zarówno hash[:my_key], jak i hash["my_key"] wskażą ten sam rekord

 26
Author: G.B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-25 18:38:51

Zawsze możesz użyć Hash#key?, aby sprawdzić, czy klucz jest obecny w hashu, czy nie.

Jeśli nie zwróci cię false

hash =  { one: 1, two:2 }

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

hash.key?(:four)
#=> false
 4
Author: Deepak Mahakale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-14 16:13:34