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

ชุดทับทิม – ตัวอย่าง ตัวดำเนินการ และวิธีการ

ชุดทับทิมคืออะไร

ชุดคือคลาสที่เก็บไอเท็มเช่นอาร์เรย์…

แต่ด้วยคุณสมบัติพิเศษบางอย่างที่ทำให้ เร็วขึ้น 10 เท่า ในสถานการณ์เฉพาะ!

ยิ่งไปกว่านั้น:

ไอเทมทั้งหมดในเซ็ต รับประกันว่าไม่ซ้ำใคร .

ในบทช่วยสอน Ruby นี้ คุณจะได้เรียนรู้:

  • ควรใช้ชุดอย่างไรและเมื่อใดเพื่อประโยชน์สูงสุดของคุณ
  • ความแตกต่างระหว่างชุดและอาร์เรย์!
  • รายการวิธีการตั้งค่าที่มีประโยชน์

เริ่มกันเลย!

ตัวอย่างชุดทับทิม

ชุดคือคลาส Ruby ที่ช่วยคุณ สร้างรายการไอเท็มเฉพาะ .

นี่คือตัวอย่างว่าสิ่งนี้มีประโยชน์อย่างไร:

สมมติว่าคุณกำลังดูรายการผลิตภัณฑ์จำนวนมาก

แต่ มีรายการที่ซ้ำกัน ในรายการนี้ &คุณต้องการเฉพาะผลิตภัณฑ์ที่ไม่เหมือนใคร

คุณสามารถใส่ไว้ในชุด และชุดจะทำให้แน่ใจว่ารายการผลิตภัณฑ์ของคุณจะไม่ซ้ำกัน โดยไม่ต้องดำเนินการใดๆ เพิ่มเติม .

นี่คือวิธีการ:

require 'set'

products = Set.new

products << 1
products << 1
products << 2

products
# Set: {1, 2}

ข้อดีอีกอย่างคือ การค้นหารายการนี้จะเร็วมาก :

products.include?(1)

# true

วิธีนี้เร็วมากเพราะทำการค้นหาในเวลาคงที่

Set vs Array – การทำความเข้าใจความแตกต่าง

ตอนนี้คุณอาจจะสงสัยว่า…

เซตและอาเรย์ต่างกันอย่างไร

ชุดไม่มีการเข้าถึงองค์ประกอบโดยตรง:

products[0]

# undefined method `[]'

นั่นคือความแตกต่างหลัก

แต่ ชุดสามารถแปลงเป็นอาร์เรย์ได้ ทุกเวลาที่คุณต้องการ:

products.to_a

# [1, 2]

จุดรวมของการใช้เซตคือการใช้คุณลักษณะพิเศษสองอย่าง:

  • ค้นหาได้รวดเร็ว (ด้วย include? )
  • ค่าที่ไม่ซ้ำ

หากคุณต้องการสิ่งเหล่านี้ ชุดหนึ่งจะช่วยเพิ่มประสิทธิภาพที่ดีให้คุณ และคุณไม่จำเป็นต้องโทรหา uniq ในอาร์เรย์ของคุณทุกครั้งที่คุณต้องการองค์ประกอบที่เป็นเอกลักษณ์

Set vs Array Benchmark

นี่คือเกณฑ์มาตรฐานเพื่อแสดงความแตกต่างของประสิทธิภาพระหว่างอาร์เรย์และชุด include? วิธีการ

# Ruby 2.5.0

set   include: 8381985.2 i/s
array include: 703305.5  i/s - 11.92x  slower

สาเหตุของความแตกต่างนี้คือ อาร์เรย์ต้องตรวจสอบทุกองค์ประกอบ!

หากคุณมีอาร์เรย์องค์ประกอบ 1 ล้านองค์ประกอบ คุณจะต้องตรวจสอบ 1 ล้านองค์ประกอบทุกครั้งที่คุณเรียก include? .

ชุดไม่จำเป็นต้องทำเช่นนั้น

วิธีการเซ็ตทับทิม

มีการดำเนินการหรือวิธีการหลายอย่างที่สามารถทำได้ระหว่างชุด ถ้าคุณมีพื้นฐานทางคณิตศาสตร์ คุณอาจจะจำได้

ยูเนี่ยนโอเปอเรเตอร์

วิธีการตั้งค่าที่มีประโยชน์วิธีหนึ่งคือ ตัวดำเนินการสหภาพ:

products | (1..10)

# Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

โอเปอเรเตอร์นี้ให้คุณรวมองค์ประกอบที่ไม่ซ้ำกันทั้งหมดของสองชุดเป็นชุดเดียว

อย่างไรก็ตาม สิ่งนี้ใช้ได้กับอ็อบเจ็กต์ Enumerable ใดๆ เช่น อาร์เรย์ ช่วง &แฮช ไม่เพียงแต่ออบเจ็กต์จาก Set ชั้นเรียน

ตัวดำเนินการส่วนต่าง

หากคุณต้องการลบองค์ประกอบของชุดหนึ่งออกจากชุดอื่น นี่คือวิธีการของคุณ

นี่คือตัวอย่าง :

products - (3..4)

# Set: {1, 2, 5, 6, 7, 8, 9, 10}

ตัวดำเนินการทางแยก

และนี่คือ ชุด ตัวดำเนินการทางแยก:

Set.new(1..3) & Set.new(2..5)

# Set: {2, 3}

ซึ่งจะให้องค์ประกอบทั่วไปในทั้งสองชุด ชุดทับทิม – ตัวอย่าง ตัวดำเนินการ และวิธีการ โอเปอเรเตอร์ 3 ตัวนี้ (ยูเนียน ความแตกต่าง &ทางแยก) ยังสามารถใช้กับอาร์เรย์ได้

ซุปเปอร์เซ็ต &เซ็ตย่อย

superset คือ ชุดที่มีองค์ประกอบทั้งหมดของชุดอื่น .

คุณสามารถตรวจสอบว่าชุดหนึ่งเป็นชุดที่เกินจากชุดอื่นหรือไม่

ถูกใจสิ่งนี้ :

Set.new(10..40) >= Set.new(20..30)

ช่วง 10..40 มี 20..30 ภายในนั้น

เซตย่อย เป็นชุดที่สร้างจากชิ้นส่วนของชุดอื่น:

Set.new(25..27) <= Set.new(20..30)

วิธีใช้ชุดการเรียงลำดับ

หากคุณต้องการชุดที่จัดเรียงอยู่เสมอ คุณสามารถใช้ SortedSet ชั้นเรียน

มีข้อกำหนดบางประการในการใช้คลาสนี้:

  1. วัตถุที่คุณกำลังเพิ่มในชุด ต้องดำเนินการ วิธีการ <=>
  2. วัตถุ ต้องเทียบกัน (เปรียบเทียบจำนวนเต็มกับจำนวนเต็ม หรือสตริงกับสตริง)

นี่คือตัวอย่าง:

sorted_numbers = SortedSet.new

sorted_numbers << 5
sorted_numbers << 2
sorted_numbers << 1

sorted_numbers
# SortedSet: {1, 2, 5}

ตั้งค่าวิดีโอสอน

สรุป

คุณได้เรียนรู้วิธีการใช้ชุดใน Ruby เพื่อประสิทธิภาพที่ดีขึ้นและการเข้ารหัสที่ง่ายขึ้น คุณยังได้เรียนรู้เกี่ยวกับความแตกต่างระหว่างอาร์เรย์และชุดต่างๆ

โปรดแบ่งปันบทความนี้หากคุณพบว่ามีประโยชน์เพื่อให้ผู้คนจำนวนมากสามารถค้นพบได้ 🙂

ขอบคุณสำหรับการอ่าน!