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

วิธีใช้คิวใน Ruby

คิวก็เหมือนรอคิว

ลองนึกภาพว่าคุณกำลังต่อแถวเพื่อซื้อผลิตภัณฑ์ Apple ล่าสุด ซื้อตั๋วหนัง หรือจ่ายค่าของชำ

นี่คือคิว!

คุณสามารถใช้คิวในโครงการ Ruby ของคุณ

อย่างไร

คิวช่วยให้คุณประมวลผลสิ่งต่าง ๆ ตามลำดับการมาถึง ดังนั้นจึงมีประโยชน์สำหรับทุกสิ่งที่จำเป็นต้องให้ความสำคัญกับสิ่งต่าง ๆ ยิ่งรอนานขึ้น

คุณสามารถนำไปใช้กับ :

  • จำลองคิวในโลกแห่งความเป็นจริง
  • ใช้อัลกอริธึม เช่น การค้นหาแบบกว้างก่อน (BFS)
  • ควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกัน เช่น CPU ดิสก์ เครื่องพิมพ์ ฯลฯ

ตอนนี้…

มาดูโค้ดกัน!

วิธีการใช้คิวใน Ruby

อาร์เรย์สามารถทำงานเหมือน Queue หากคุณใช้วิธีการที่ถูกต้อง

วิธีการเหล่านี้ :

  • unshift (หรือ prepend ด้วย Ruby 2.5+)
  • pop

เมื่อคุณ unshift คุณกำลังเพิ่มหนึ่งรายการในคิว

ตัวอย่าง :

queue = []

queue.unshift "apple"
queue.unshift "orange"
queue.unshift "banana"

# ["banana", "orange", "apple"]

เมื่อคุณ pop คุณลบรายการสุดท้ายออกจากคิว

นี่คือรายการถัดไปที่ควรดำเนินการ

ตัวอย่าง :

queue.pop
# "apple"

queue.pop
# "orange"

คุณสามารถดูรายการสุดท้ายเพื่อดูว่า "ใครคือรายต่อไป" โดยไม่ต้องลบรายการนี้

ตัวอย่าง :

queue[-1]

# "banana"

การดำเนินการนี้เรียกว่า peek .

คิวทับทิมพร้อมกัน

Ruby มีเธรดที่ปลอดภัย บล็อก Queue ชั้นเรียน

คุณสามารถใช้คิวนี้เพื่อประสานงานการทำงานในโปรแกรมแบบมัลติเธรดได้

ตัวอย่าง :

que = Queue.new

que << 1
que << 2
que << 3

คุณสามารถรับรายการจากคิวนี้ด้วย pop :

que.pop
# 1

que.pop
# 2

ถ้าคิวว่าง เรียก pop จะทำให้เธรดปัจจุบันของคุณเข้าสู่โหมดสลีป &รอจนกว่าจะมีการเพิ่มบางอย่างลงในคิว .

นั่นคือความหมายของการ "บล็อก"

คุณสามารถหลีกเลี่ยงการบล็อกได้โดยส่ง true เพื่อ pop :

que.pop(true)

สิ่งนี้จะเพิ่ม ThreadError: queue empty ยกเว้นเมื่อคิวว่าง

วิธีใช้คิวที่มีขนาด

คิวที่มีขนาดจะเหมือนกับคิวปกติแต่มีการจำกัดขนาด

ตัวอย่าง :

que = SizedQueue.new(5)

เมื่อคิวเต็มให้กด push (เหมือนกับ << ) การดำเนินการจะระงับเธรดปัจจุบันจนกว่ารายการจะถูกลบออกจากคิว

ตัวอย่าง :

que.push(:bacon)

คุณสามารถเลือกที่จะยกข้อยกเว้นแทนโดยส่ง true เป็นอาร์กิวเมนต์:

que.push(:bacon, true)

สิ่งนี้ทำให้เกิด ThreadError: queue full .

วิดีโอสอน

สรุป

คุณได้เรียนรู้เกี่ยวกับคิว Ruby แล้ว!

คุณสามารถใช้คิวเมื่อต้องการประมวลผลงานในลำดับ FIFO (เข้าก่อน-ออกก่อน) . มีสองวิธีในการใช้งานคิว ใช้อาร์เรย์หรือใช้ Queue ชั้นเรียน

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