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

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

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)ช้ากว่า
NamespaceSystem.Collections.GenericSystem.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