it-swarm.com.de

Wie kann man überprüfen, ob ein bestimmter Schlüssel in einem Hash vorhanden ist oder nicht?

Ich möchte überprüfen, ob der "Benutzer" -Schlüssel im Sitzungs-Hash vorhanden ist oder nicht. Wie kann ich das machen?

Beachten Sie, dass ich nicht prüfen möchte, ob der Wert des Schlüssels Null ist oder nicht. Ich möchte nur überprüfen, ob der "Benutzer" Schlüssel vorhanden ist.

583
Mohit Jain

Die Methode key? von Hash gibt an, ob ein bestimmter Schlüssel vorhanden ist oder nicht.

session.key?("user")
876
sepp2k

Während Hash#has_key? die Arbeit erledigt, wie Matz feststellt hier , wurde es zugunsten von Hash#key? verworfen.

hash.key?(some_key)
279
Bozhidar Batsov

In den neuesten Ruby Versionen hat die Hash-Instanz eine key? Methode:

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

Stellen Sie sicher, dass Sie den Symbolschlüssel oder einen String-Schlüssel verwenden, je nachdem, was in Ihrem Hash enthalten ist:

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

Es ist sehr spät, aber vorzugsweise sollten Symbole als Schlüssel verwendet werden:

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 

Wenn Sie jedoch einen Hash erstellen und einen String als Schlüssel übergeben, sucht dieser nach dem String in den Schlüsseln.

Aber wenn Sie einen Hash erstellen, übergeben Sie das Symbol als Schlüssel und dann als has_key? Durchsucht die Tasten mit dem Symbol.


Wenn Sie Rails verwenden, können Sie Hash#with_indifferent_access verwenden, um dies zu vermeiden. Sowohl hash[:my_key] als auch hash["my_key"] zeigen auf denselben Datensatz

27
G.B

Sie können immer Hash#key? verwenden, um zu überprüfen, ob der Schlüssel in einem Hash vorhanden ist oder nicht.

Wenn nicht, wird es Ihnen zurückgeben false

hash =  { one: 1, two:2 }

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

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

Ein anderer Weg ist hier

hash = {one: 1, two: 2}

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

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