เมธอด Queue<T>.ToArray() ใน C# ใช้คัดลอกสมาชิกใน Queue ไปยังอาร์เรย์ใหม่ สร้าง snapshot ของข้อมูล ณ เวลานั้นๆ โดยไม่ลบข้อมูลออกจาก Queue ต้นฉบับ
รูปแบบไวยากรณ์ (Syntax)
public virtual T[] ToArray();
- คืนค่า : อาร์เรย์ใหม่ (
T[]) ที่มีสมาชิกเท่ากับ Queue ตามลำดับ FIFO
ตัวอย่างที่ 1: Queue ของ int
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
Console.WriteLine("Queue...");
foreach (int i in queue)
{
Console.WriteLine(i);
}
int[] intArr = queue.ToArray();
Console.WriteLine("\nConvert Queue to Array...");
foreach (int i in intArr)
{
Console.WriteLine(i);
}
}
}
ผลลัพธ์
Queue... 1 2 3 4 5 Convert Queue to Array... 1 2 3 4 5
ตัวอย่างที่ 2: Queue ของ string
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Queue queue = new Queue();
queue.Enqueue("A");
queue.Enqueue("B");
queue.Enqueue("C");
queue.Enqueue("D");
queue.Enqueue("E");
queue.Enqueue("F");
Console.WriteLine("Queue...");
foreach (string i in queue)
{
Console.WriteLine(i);
}
string[] strArr = queue.ToArray();
Console.WriteLine("\nConvert Queue to Array...");
foreach (string i in strArr)
{
Console.WriteLine(i);
}
}
}
ผลลัพธ์
Queue... A B C D E F Convert Queue to Array... A B C D E F
สรุปและข้อสังเกต
- ToArray() สร้างอาร์เรย์ใหม่ (shallow copy) ไม่กระทบ Queue ต้นฉบับ
- ลำดับในอาร์เรย์ = ลำดับ FIFO ของ Queue (Dequeue order)
- Queue ยังคงสมาชิกเดิมอยู่ หลังจาก ToArray()
- ใช้เมื่อต้องการ: ส่งข้อมูลให้ API ที่รับ array, ใช้ LINQ, บันทึก snapshot, random access
- Complexity: O(n) โดย n = Count
- Non-generic
Queue.ToArray()คืนobject[]ต้อง cast
ตัวอย่างการประยุกต์: ใช้ LINQ กับ Array ที่แปลงแล้ว
Queuequeue = new Queue (); queue.Enqueue(10); queue.Enqueue(5); queue.Enqueue(20); queue.Enqueue(15); int[] arr = queue.ToArray(); // ใช้ LINQ (ต้องการ array/IEnumerable) var sorted = arr.OrderBy(x => x).ToArray(); // [5, 10, 15, 20] var sum = arr.Sum(); // 50 var max = arr.Max(); // 20 // Queue เดิมยังคงสมบูรณ์ Console.WriteLine(queue.Dequeue()); // 10 (FIFO)