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

วิธี Pop องค์ประกอบแรกจาก List ใน C#

การนำองค์ประกอบแรกออกจาก List (Pop Front) ใน C#

C# List<T> ไม่มีเมธอด Pop() หรือ Dequeue() ตรงๆ แต่สามารถใช้ RemoveAt(0) เพื่อลบและดึงองค์ประกอบแรกได้ (แนวคิดคล้าย Pop Front)

ตัวอย่างโค้ด

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List myList = new List() 
        { 
            "Operating System", 
            "Computer Networks", 
            "Compiler Design" 
        };

        Console.WriteLine("รายการเริ่มต้น:");
        foreach (string item in myList)
            Console.WriteLine($"  {item}");

        // Pop องค์ประกอบแรก (index 0)
        string firstItem = myList[0];  // เก็บค่าก่อนลบ (ถ้าต้องการใช้)
        myList.RemoveAt(0);

        Console.WriteLine($"\nPop ออก: {firstItem}");
        Console.WriteLine("รายการหลัง Pop:");
        foreach (string item in myList)
            Console.WriteLine($"  {item}");
    }
}

ผลลัพธ์


รายการเริ่มต้น:
  Operating System
  Computer Networks
  Compiler Design

Pop ออก: Operating System
รายการหลัง Pop:
  Computer Networks
  Compiler Design

เมธอดที่เกี่ยวข้องกับการลบ

เมธอดคำอธิบายคืนค่า
RemoveAt(index)ลบที่ดัชนีระบุvoid
Remove(item)ลบรายการแรกที่ตรงค่าbool (สำเร็จ/ไม่)
RemoveAll(predicate)ลบทั้งหมดที่ตรงเงื่อนไขint (จำนวนที่ลบ)
Clear()ล้างทั้งหมดvoid

สร้างเมธอด Pop แบบ Reusable


public static T PopFirst(this List list)
{
    if (list.Count == 0)
        throw new InvalidOperationException("List is empty");
    
    T item = list[0];
    list.RemoveAt(0);
    return item;
}

// ใช้งาน
var list = new List { 1, 2, 3 };
int first = list.PopFirst(); // first = 1, list = {2, 3}

ประสิทธิภาพ: List vs Queue

OperationList<T> (RemoveAt(0))Queue<T> (Dequeue)
Time ComplexityO(n) - ต้องเลื่อนทุกตัวO(1) - แค่เลื่อน pointer
เหมาะสำหรับPop น้อย, ต้องการ random accessPop บ่อย, แบบ FIFO

แนะนำ: หากต้อง Pop Front บ่อย ให้ใช้ Queue<T> แทน List

Queue<T> สำหรับ Pop Front ที่มีประสิทธิภาพ


using System.Collections.Generic;

var queue = new Queue();
queue.Enqueue("A");
queue.Enqueue("B");
queue.Enqueue("C");

string first = queue.Dequeue(); // O(1) - "A", queue = {B, C}
string peek = queue.Peek();     // "B" - ดูอย่างเดียว ไม่ลบ