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


634

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 überprü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.

Antworten:


950

HashDie key?Methode von ' sagt Ihnen, ob ein bestimmter Schlüssel vorhanden ist oder nicht.

session.key?("user")

nice: "string" accessor funktioniert auch für JSON.parse analysierte Objekte :)
Bijan

2
Dies funktioniert bei mir nicht, stattdessen funktioniert die: user-Methode
Akash Agarwal

295

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

hash.key?(some_key)

1
Netter Hinweis auf diese Änderungsanforderung und nachfolgende Antwort von Matz.
Joshua Pinter

Weiß jemand sicher?
Codeforester

41

In den neuesten Ruby-Versionen verfügt die Hash-Instanz über 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 Sie in Ihrem Hash haben:

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

2
Anscheinend gab es bereits Ruby 1.6: ruby-doc.com/docs/ProgrammingRuby/html/… (vielleicht früher, keine Ahnung, wo dokumentiert werden soll)
Beni Cherniavsky-Paskin

28

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 beim Erstellen eines Hashs eine Zeichenfolge als Schlüssel übergeben, wird in Zeichen nach der Zeichenfolge gesucht.

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


Wenn Sie Rails verwenden, können Sie dies Hash#with_indifferent_accessvermeiden. beide hash[:my_key]und hash["my_key"]zeigen auf den gleichen Datensatz


6
Wenn Sie Rails verwenden, können Sie dies Hash#with_indifferent_accessvermeiden. beide :my_keyund "my_key"wird auf den gleichen Rekord verweisen
Devon Parsons

5

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

Wenn nicht, wird es Sie zurückgeben false

hash =  { one: 1, two:2 }

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

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

3

Ein anderer Weg ist hier

hash = {one: 1, two: 2}

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

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

0

In Rails 5 ist der has_key? Die Methode prüft, ob der Schlüssel im Hash vorhanden ist. Die Syntax dafür lautet:

YourHash.has_key? :yourkey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.