แฮชทับทิมคืออะไร
แฮชคือโครงสร้างข้อมูลที่ใช้ในการจัดเก็บข้อมูลในรูปแบบของคู่คีย์-ค่าที่ไม่ซ้ำกัน ไม่มีดัชนีตัวเลขต่างจากอาร์เรย์ คุณเข้าถึงค่าแฮชด้วยคีย์
ตัวอย่าง ได้แก่ :
- รายชื่อประเทศและรหัสประเทศที่เกี่ยวข้อง (เช่น ES ⇾ Spain)
- พจนานุกรมที่ทุกคำมีรายการคำจำกัดความที่เป็นไปได้
- ชื่อโดเมน &เป็นที่อยู่ IP
การใช้แฮชในโปรแกรม Ruby จะทำให้โค้ดของคุณเร็วขึ้นเมื่อใช้ในสถานการณ์ที่เหมาะสม
กล่าวอีกนัยหนึ่ง :
คุณมีข้อมูลที่ (หรือสามารถแปลงเป็น) รูปแบบคล้ายพจนานุกรม ซึ่งข้อมูลสามารถจัดกลุ่มตามคีย์และค่าที่เกี่ยวข้องได้
วิธีการสร้างแฮช
ได้เลย
เราเข้าใจแนวคิดทั่วไปว่าแฮชคืออะไร แต่คุณจะสร้างแฮชได้อย่างไร
ถูกใจสิ่งนี้ :
{}
นั่นมันแฮชเปล่านะ!
แฮชที่มีคู่คีย์/ค่าสามคู่มีลักษณะดังนี้ :
{ a: 1, b: 2, c: 3 }
โดยที่ a
เป็นกุญแจสำคัญ และ 1
เป็นค่าที่สอดคล้องกันสำหรับคีย์นั้น สังเกตว่าคู่คีย์-ค่าคั่นด้วยเครื่องหมายจุลภาค
ตอนนี้ :
มาดูวิธีการใช้แฮชในโปรเจ็กต์ Ruby ด้วยวิธีแฮชทั่วไปกัน
การจัดเก็บค่าใน Ruby Hash
คุณสามารถสร้างแฮชด้วยชุดค่าเริ่มต้นดังที่เราได้เห็นแล้ว
นี่เป็นอีกตัวอย่างหนึ่ง :
fruits = { coconut: 1, apple: 2, banana: 3 }
อีกทางเลือกหนึ่งคือการเพิ่มค่าใหม่ลงในแฮชที่มีอยู่
ถูกใจสิ่งนี้ :
fruits[:orange] = 4
นี่คือ :orange
เป็นคีย์แฮช และ 4
เป็นค่าที่สอดคล้องกัน
ทำไมโคลอนอยู่หน้าคำว่า
:orange
เมื่อเราเข้าถึงค่า &หลังคำว่าorange:
เมื่อเราสร้างแฮช? มันเป็นรูปแบบที่ดีกว่าที่ช่วยให้คุณสามารถสร้างแฮชโดยไม่ต้องใช้แฮชจรวด (=>
) สัญลักษณ์ที่ถูกต้องแต่เก่ากว่าในการทำ
ค่าสามารถเป็นวัตถุ Ruby ใดก็ได้
รวมถึง :
- สตริง
- จำนวนเต็มและทศนิยม
- อาร์เรย์
กุญแจสามารถเป็นอะไรก็ได้ ยกเว้นสัญลักษณ์ (เช่น :banana
) &สตริงเป็นคีย์ประเภททั่วไปที่คุณจะพบ
จำไว้ว่า…
คีย์มีเอกลักษณ์เฉพาะ เรามีได้เพียง :orange
คีย์หรือ :apple
. หนึ่งอัน ที่สำคัญ
เมื่อคุณเพิ่มคีย์เดิมสองครั้ง คุณจะเปลี่ยนค่าของคีย์นั้น
วิธีเข้าถึงค่าจากแฮช
คุณเข้าถึงแฮชด้วยคีย์
หากคุณต้องการเข้าถึงค่าโดยตรง แฮชอาจไม่ใช่โครงสร้างที่เหมาะสมสำหรับข้อมูลของคุณ
ตัวอย่าง :
fruits[:orange] # 4
นี่คือจุดรวมของแฮช เพื่อค้นหารายการโดยใช้คีย์ .
หากไม่มีคีย์ คุณจะได้รับ nil
.
fruits[:peach] # nil
คุณสามารถใช้ fetch
. แทนได้ วิธีซึ่งอนุญาตให้คุณระบุค่าเริ่มต้น
ตัวอย่าง :
fruits.fetch(:peach, 0)
หากคุณใช้ fetch
โดยไม่มีค่าเริ่มต้น (อาร์กิวเมนต์ที่ 2) Ruby จะเพิ่ม KeyError
ข้อยกเว้น
มีประโยชน์เพราะคุณจะรู้ว่าคีย์ใดหายไป
วิธีการผสานสองรูบี้แฮช
คุณนำแฮช 2 รายการมารวมกันเป็นแฮชใหม่ได้
วิธีนี้ใช้ทำอะไร
ไม่ยากที่จะคาดเดาสิ่งนี้ ชื่อของเมธอดคือ merge
.
วิธีใช้งาน :
defaults = { a: 1, b: 2, c: 3 } preferences = { c: 4 } defaults.merge!(preferences) # {:a=>1, :b=>2, :c=>4}
สังเกตว่าเนื่องจาก คีย์ไม่ซ้ำกัน ค่าที่ใหม่กว่าจะเขียนทับค่าที่เก่ากว่า
คุณสามารถใช้ข้อเท็จจริงนี้ในการแก้ปัญหาที่น่าสนใจ เช่น การสร้างแฮช "ค่าเริ่มต้น" ซึ่งผู้ใช้สามารถแทนที่ได้โดยการส่งผ่านแฮชของตนเอง
หากคุณต้องการควบคุมวิธีการรวมคีย์เพิ่มเติม คุณสามารถผ่านบล็อกได้
ถูกใจสิ่งนี้ :
defaults.merge!(preferences) { |key, old, new| [old, new].max }
โดยที่ old
เป็นค่าที่มาจาก defaults
และ new
เป็นค่าที่มาจาก preferences
.
ค่าหลายค่าสำหรับหนึ่งคีย์
ในพจนานุกรม…
คำไม่ซ้ำกัน แต่สามารถมีค่าได้หลายค่า (คำจำกัดความ ) เกี่ยวข้องกับพวกเขา
คุณสามารถทำได้ใน Ruby!
ตัวอย่าง :
dictionary = { opportunity: [ "a set of circumstances that makes it possible to do something", "a situation or condition favorable for attainment of a goal" ], creativity: [ "the use of imagination or original ideas to create something new", "the ability to create", "the process where new ideas emerge from combining existing ideas in new ways" ] } dictionary[:creativity][1]
โดยที่ dictionary[:creativity]
ให้คุณมีอาร์เรย์ &[1]
ให้องค์ประกอบที่ 2 จากอาร์เรย์นั้นแก่คุณ
กล่าวอีกนัยหนึ่ง :
กุญแจสำคัญคือสัญลักษณ์ &ค่าคืออาร์เรย์ เมื่อคุณเข้าถึงแฮช คุณจะได้รับอาร์เรย์กลับมาซึ่งคุณเข้าถึงได้ตามปกติ เช่นเดียวกับอาร์เรย์อื่นๆ
วิธีการจัดเรียงแฮช
คุณสามารถเรียงลำดับอาร์เรย์ แต่คุณรู้หรือไม่ว่าคุณสามารถจัดเรียงแฮชได้
เมื่อคุณ sort
แฮชจะจัดเรียงตามคีย์
ตัวอย่าง :
{ b: 1, a: 2 }.sort # [[:a, 2], [:b, 1]]
แต่คุณยังสามารถจัดเรียงตามค่าได้ :
{ c: 3, b: 1, a: 2 }.sort_by(&:last)
คุณจะสังเกตเห็นว่าสิ่งที่คุณได้รับจากการจัดเรียงแฮชไม่ใช่แฮชอื่น…
เป็นอาร์เรย์!
แต่คุณสามารถแปลงอาร์เรย์นี้กลับเป็นแฮชได้โดยใช้ to_h
วิธีการ
รับคีย์และค่าทั้งหมดจากแฮช
หากคุณต้องการรายการแฮชคีย์ทั้งหมด ข่าวดี มีวิธีนั้น!
นี่เลย :
{ apple: 1, banana: 2 }.keys # [:apple, :banana]
นอกจากนี้ยังมีวิธีการที่ช่วยให้คุณมีอาร์เรย์ที่มีค่า :
{ apple: 1, banana: 2 }.values # [1, 2]
หากคุณต้องการทราบว่ามีคีย์อยู่ในแฮชหรือไม่ แทนที่จะรับอาร์เรย์ของคีย์ ให้ใช้ key?
วิธีการ
เมธอดนี้คืนค่า true
หรือ false
ค่า
สรุป
คุณได้เรียนรู้เกี่ยวกับ Ruby hashes ซึ่งเป็นโครงสร้างข้อมูลที่เป็นประโยชน์ซึ่งประกอบด้วยคู่คีย์-ค่า คุณยังได้เรียนรู้วิธีเข้าถึงแฮชด้วยคีย์ และวิธีจัดเก็บข้อมูลใหม่ในแฮช
ตอนนี้เปิด irb (หรือ pry) และเริ่มเล่นกับแฮช!
ขอบคุณที่อ่านนะคะ 🙂