Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เมธอด Queue.ToArray() ใน C# : คัดลอกคิวเป็นอาร์เรย์

เมธอด 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 ที่แปลงแล้ว

Queue queue = 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)