Phương thức Queue<T>.ToArray() trong C# được dùng để sao chép các phần tử của Queue vào một mảng mới. Thứ tự phần tử trong mảng tương ứng với thứ tự FIFO của Queue (phần tử đầu hàng ở chỉ mục 0).
Cú pháp
public virtual T[] ToArray();
Trả về: Mảng mới chứa bản sao các phần tử.
Ví dụ 1: Queue<int> chuyển mảng 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("\nChuyển Queue sang Array...");
foreach (int i in intArr)
{
Console.WriteLine(i);
}
}
}
Kết quả
Queue... 1 2 3 4 5 Chuyển Queue sang Array... 1 2 3 4 5
Ví dụ 2: Queue<string> chuyển mảng 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 s in queue)
{
Console.WriteLine(s);
}
string[] strArr = queue.ToArray();
Console.WriteLine("\nChuyển Queue sang Array...");
foreach (string s in strArr)
{
Console.WriteLine(s);
}
}
}
Kết quả
Queue... A B C D E F Chuyển Queue sang Array... A B C D E F
Đặc điểm quan trọng
- Tạo mảng mới, không ảnh hưởng Queue gốc.
- Queue gốc giữ nguyên nội dung và thứ tự sau khi gọi ToArray().
- Thứ tự mảng:
array[0]= phần tử sẽ Dequeue đầu tiên (front),array[Length-1]= phần tử cuối hàng (rear). - Phức độ: O(n) thời gian và không gian.
Queue non-generic (System.Collections.Queue)
Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue(2); object[] arr = queue.ToArray(); // Trả về object[]
Khi nào dùng ToArray()?
- Cần truyền dữ liệu Queue cho API yêu cầu mảng.
- Cần snapshot (bản chụp) trạng thái Queue tại thời điểm đó.
- Cần truy cập ngẫu nhiên bằng chỉ mục (Queue chỉ hỗ trợ truy cập tuần tự).
- Serialization, logging, debug.
Lưu ý
- Khác với
Stack.ToArray(): Stack ToArray trả về mảng với top ở cuối (index Length-1), Queue ToArray trả về front ở đầu (index 0). - Generic
Queue<T>.ToArray()trả vềT[](an toàn kiểu), non-generic trả vềobject[].