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

แปลง Queue เป็น Array ใน C#

Queue<T> มีเมธอด ToArray() ที่คัดลอกสมาชิกทั้งหมดไปเป็น array ใหม่ ลำดับใน array จะเป็น Front to Rear (FIFO order - ตัวหน้าคิวอยู่ index 0)

ตัวอย่างโค้ดที่ 1: จำนวนเต็ม

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        Queue queue = new Queue();
        queue.Enqueue(100);
        queue.Enqueue(200);
        queue.Enqueue(300);
        queue.Enqueue(400);
        queue.Enqueue(500);
        queue.Enqueue(600);
        queue.Enqueue(700);
        queue.Enqueue(800);
        queue.Enqueue(900);
        queue.Enqueue(1000);

        Console.WriteLine("Queue... (foreach queue)");
        foreach (int i in queue)
        {
            Console.WriteLine(i);
        }

        int[] intArr = queue.ToArray();
        Console.WriteLine("Convert Queue to Array... (foreach array)");
        foreach (int i in intArr)
        {
            Console.WriteLine(i);
        }
    }
}

ผลลัพธ์

Queue... (foreach queue)
100
200
300
400
500
600
700
800
900
1000
Convert Queue to Array... (foreach array)
100
200
300
400
500
600
700
800
900
1000

ตัวอย่างโค้ดที่ 2: สตริง

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("Array... (foreach queue)");
        foreach (string i in queue)
        {
            Console.WriteLine(i);
        }

        string[] strArr = queue.ToArray();
        Console.WriteLine("Convert Queue to Array... (foreach array)");
        foreach (string i in strArr)
        {
            Console.WriteLine(i);
        }
    }
}

ผลลัพธ์

Array... (foreach queue)
A
B
C
D
E
F
Convert Queue to Array... (foreach array)
A
B
C
D
E
F

ข้อสังเกต

  • ToArray() สร้าง array ใหม่ (copy) - แยกจาก queue เดิม
  • ลำดับใน array = Front to Rear (FIFO order) - ตรงกับ foreach บน queue
  • เวลา O(n), พื้นที่ O(n)
  • ใช้ได้กับทั้ง Queue<T> (generic) และ Queue (non-generic)

Queue<T> vs Queue (Non-generic)

คุณสมบัติQueue<T>Queue
Type Safetyมีไม่มี (object)
ToArray()T[]object[]
Performanceดีกว่าช้ากว่า
NamespaceSystem.Collections.GenericSystem.Collections

การใช้งานจริง


// ส่ง queue ไป method ที่รับ array
void ProcessItems(int[] items) { ... }

var queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);
ProcessItems(queue.ToArray());

// LINQ operations
var arr = queue.ToArray();
var reversed = queue.Reverse().ToArray(); // Rear to Front
var first3 = queue.Take(3).ToArray();