เมธอด Queue.Peek() ใน C# ใช้สำหรับดูค่าที่อยู่หน้าสุด (front) ของคิว โดยไม่ลบออก จากคิว — ต่างจาก Dequeue() ที่จะลบค่าออกไปพร้อมกัน
ไวยากรณ์ (Syntax)
public virtual object Peek ();
ตัวอย่างที่ 1: Queue แบบ Non-Generic
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
queue.Enqueue("AB");
queue.Enqueue("BC");
queue.Enqueue("CD");
queue.Enqueue("DE");
queue.Enqueue("EF");
queue.Enqueue("FG");
queue.Enqueue("GH");
queue.Enqueue("HI");
Console.WriteLine("Queue...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext())
{
Console.WriteLine(demoEnum.Current);
}
Console.WriteLine("Queue element at the beginning = " + queue.Peek());
Console.WriteLine("Is Queue synchronized? = " + queue.IsSynchronized);
Queue queue2 = Queue.Synchronized(queue);
Console.WriteLine("Is Queue synchronized now? = " + queue2.IsSynchronized);
}
}
ผลลัพธ์
Queue... AB BC CD DE EF FG GH HI Queue element at the beginning = AB Is Queue synchronized? = False Is Queue synchronized now? = True
ตัวอย่างที่ 2: Queue แบบ Generic (Queue<string>)
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
queue.Enqueue("Gary");
queue.Enqueue("Jack");
queue.Enqueue("Ryan");
queue.Enqueue("Kevin");
queue.Enqueue("Mark");
queue.Enqueue("Jack");
queue.Enqueue("Ryan");
queue.Enqueue("Kevin");
Console.Write("Count of elements = ");
Console.WriteLine(queue.Count);
Console.WriteLine("Queue element at the beginning = " + queue.Peek());
Console.WriteLine("Does the queue have element Jack? = " + queue.Contains("Jack"));
queue.Clear();
Console.Write("Count of elements (updated) = ");
Console.WriteLine(queue.Count);
}
}
ผลลัพธ์
Count of elements = 8 Queue element at the beginning = Gary Does the queue have element Jack? = True Count of elements (updated) = 0
ข้อสังเกตสำคัญ
Peek()คืนค่าออบเจ็กต์ที่หน้าสุด โดยไม่ลบออก — คิวยังคงสมบูรณ์- หากคิวว่าง (
Count == 0) การเรียกPeek()จะโยนInvalidOperationException - ควรตรวจสอบ
Count > 0ก่อนเรียก Peek() เสมอ - Queue เป็นโครงสร้างข้อมูลแบบ FIFO (First In, First Out) — ค่าที่เพิ่มก่อนจะอยู่หน้าสุด
- เวอร์ชัน Generic
Queue<T>.Peek()คืนค่าแบบ T โดยตรง ไม่ต้องแคสต์