จะตรวจสอบได้อย่างไรว่ามีกุญแจที่เฉพาะเจาะจงอยู่ในแฮชหรือไม่?


636

ฉันต้องการตรวจสอบว่ามีคีย์ "ผู้ใช้" อยู่หรือไม่ในเซสชันแฮช ฉันจะทำสิ่งนี้ได้อย่างไร

โปรดทราบว่าฉันไม่ต้องการตรวจสอบว่าค่าของคีย์เป็นศูนย์หรือไม่ ฉันแค่ต้องการตรวจสอบว่ามีคีย์ "ผู้ใช้" อยู่หรือไม่

คำตอบ:


952

Hash's key?วิธีบอกคุณว่าคีย์ที่กำหนดเป็นปัจจุบันหรือไม่

session.key?("user")

มีความสุข: "สตริง" ผลงานการเข้าถึงสำหรับ JSON.parse แยกวิเคราะห์วัตถุมากเกินไป :)
Bijan

2
วิธีนี้ใช้ไม่ได้สำหรับฉัน: วิธีผู้ใช้ทำงานแทน
Akash Agarwal

295

ในขณะที่Hash#has_key?ได้รับงานทำเป็นแมทซ์ตั้งข้อสังเกตที่นี่Hash#key?จะได้รับการคัดค้านในความโปรดปรานของ

hash.key?(some_key)

1
อ้างอิงถึงคำขอเปลี่ยนแปลงนั้นและการตอบสนองที่ตามมาจาก Matz
Joshua Pinter

ไม่มีใครรู้แน่นอน
codeforester

41

ในล่าสุดทับทิมรุ่นอินสแตนซ์แฮมีkey?วิธีการ:

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

ให้แน่ใจว่าใช้คีย์สัญลักษณ์หรือคีย์สตริงขึ้นอยู่กับสิ่งที่คุณมีในแฮชของคุณ:

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

2
เห็นได้ชัดว่ามีอยู่เร็วเท่าทับทิม 1.6: ruby-doc.com/docs/ProgrammingRuby/html/ … (บางทีก่อนหน้านี้ไม่ควรตรวจสอบเอกสารที่ไหน)
Beni Cherniavsky-Paskin

28

มันสายเกินไป แต่ควรใช้สัญลักษณ์เป็นหลัก:

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 

แต่เมื่อสร้างแฮชถ้าคุณส่งสตริงเป็นคีย์มันจะค้นหาสตริงในคีย์

แต่เมื่อสร้างแฮชคุณจะใช้สัญลักษณ์เป็นกุญแจแล้วมีคีย์? จะค้นหากุญแจโดยใช้สัญลักษณ์


หากคุณใช้ Rails คุณสามารถใช้Hash#with_indifferent_accessเพื่อหลีกเลี่ยงปัญหานี้ ทั้งสองhash[:my_key]และhash["my_key"]จะชี้ไปที่ระเบียนเดียวกัน


6
หากคุณใช้ Rails คุณสามารถใช้Hash#with_indifferent_accessเพื่อหลีกเลี่ยงปัญหานี้ ทั้งสอง:my_keyและ"my_key"จะชี้ไปที่ระเบียนเดียวกัน
Devon Parsons

5

คุณสามารถใช้งานได้ตลอดเวลา Hash#key?เพื่อตรวจสอบว่ามีคีย์อยู่ในแฮชหรือไม่

ถ้าไม่มันจะส่งคืนคุณ false

hash =  { one: 1, two:2 }

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

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


0

ใน Rails 5 the has_key? วิธีการตรวจสอบว่ากุญแจอยู่ในแฮช ไวยากรณ์ที่จะใช้คือ:

YourHash.has_key? :yourkey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.