ชุดทับทิมคืออะไร
ชุดคือคลาสที่เก็บไอเท็มเช่นอาร์เรย์…
แต่ด้วยคุณสมบัติพิเศษบางอย่างที่ทำให้ เร็วขึ้น 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
ชั้นเรียน
มีข้อกำหนดบางประการในการใช้คลาสนี้:
- วัตถุที่คุณกำลังเพิ่มในชุด ต้องดำเนินการ วิธีการ <=>
- วัตถุ ต้องเทียบกัน (เปรียบเทียบจำนวนเต็มกับจำนวนเต็ม หรือสตริงกับสตริง)
นี่คือตัวอย่าง:
sorted_numbers = SortedSet.new sorted_numbers << 5 sorted_numbers << 2 sorted_numbers << 1 sorted_numbers # SortedSet: {1, 2, 5}
ตั้งค่าวิดีโอสอน
สรุป
คุณได้เรียนรู้วิธีการใช้ชุดใน Ruby เพื่อประสิทธิภาพที่ดีขึ้นและการเข้ารหัสที่ง่ายขึ้น คุณยังได้เรียนรู้เกี่ยวกับความแตกต่างระหว่างอาร์เรย์และชุดต่างๆ
โปรดแบ่งปันบทความนี้หากคุณพบว่ามีประโยชน์เพื่อให้ผู้คนจำนวนมากสามารถค้นพบได้ 🙂
ขอบคุณสำหรับการอ่าน!