Stack<T> มีเมธอด ToArray() ที่คัดลอกสมาชิกทั้งหมดไปเป็น array ใหม่ ลำดับใน array จะเป็น Top to Bottom (ตัวบนสุดอยู่ index 0)
ตัวอย่างโค้ดที่ 1: สตริง
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Stack stack = new Stack();
stack.Push("AB");
stack.Push("CD");
stack.Push("FG");
stack.Push("KL");
Console.WriteLine("Array... (foreach stack)");
foreach (string i in stack)
{
Console.WriteLine(i);
}
string[] strArr = stack.ToArray();
Console.WriteLine("Convert Stack to Array... (foreach array)");
foreach (string i in strArr)
{
Console.WriteLine(i);
}
}
}
ผลลัพธ์
Array... (foreach stack)
KL
FG
CD
AB
Convert Stack to Array... (foreach array)
KL
FG
CD
AB
ตัวอย่างโค้ดที่ 2: จำนวนเต็ม
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
Stack stack = new Stack();
stack.Push(250);
stack.Push(500);
stack.Push(750);
stack.Push(1000);
stack.Push(1200);
stack.Push(1500);
Console.WriteLine("Array... (foreach stack)");
foreach (int i in stack)
{
Console.WriteLine(i);
}
int[] intArr = stack.ToArray();
Console.WriteLine("Convert Stack to Array... (foreach array)");
foreach (int i in intArr)
{
Console.WriteLine(i);
}
}
}
ผลลัพธ์
Array... (foreach stack)
1500
1200
1000
750
500
250
Convert Stack to Array... (foreach array)
1500
1200
1000
750
500
250
ข้อสังเกต
ToArray()สร้าง array ใหม่ (copy) - การเปลี่ยนแปลง array ไม่ส่งผลต่อ stack เดิม- ลำดับใน array = Top to Bottom (LIFO order) - ตรงกับ foreach บน stack
- เวลา O(n), พื้นที่ O(n)
- ใช้ได้กับทั้ง
Stack<T>(generic) และStack(non-generic)
Stack<T> vs Stack (Non-generic)
| คุณสมบัติ | Stack<T> | Stack |
|---|---|---|
| Type Safety | มี | ไม่มี (object) |
| ToArray() | T[] | object[] |
| Performance | ดีกว่า (no boxing) | ช้ากว่า |
| Namespace | System.Collections.Generic | System.Collections |
การใช้งานจริง
// ส่ง stack ไป method ที่รับ array
void ProcessItems(string[] items) { ... }
var stack = new Stack();
stack.Push("A");
stack.Push("B");
ProcessItems(stack.ToArray());
// หรือ LINQ
var arr = stack.ToArray();
// var arr = stack.Reverse().ToArray(); // ถ้าอยาก Bottom to Top