Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Ruby Hash – คำจำกัดความ ตัวอย่าง และวิธีการ:The Ultimate Guide

แฮชทับทิมคืออะไร

แฮชคือโครงสร้างข้อมูลที่ใช้ในการจัดเก็บข้อมูลในรูปแบบของคู่คีย์-ค่าที่ไม่ซ้ำกัน ไม่มีดัชนีตัวเลขต่างจากอาร์เรย์ คุณเข้าถึงค่าแฮชด้วยคีย์

ตัวอย่าง ได้แก่ :

  • รายชื่อประเทศและรหัสประเทศที่เกี่ยวข้อง (เช่น 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) และเริ่มเล่นกับแฮช!

ขอบคุณที่อ่านนะคะ 🙂