การนำองค์ประกอบแรกออกจาก 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
| Operation | List<T> (RemoveAt(0)) | Queue<T> (Dequeue) |
|---|---|---|
| Time Complexity | O(n) - ต้องเลื่อนทุกตัว | O(1) - แค่เลื่อน pointer |
| เหมาะสำหรับ | Pop น้อย, ต้องการ random access | Pop บ่อย, แบบ 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" - ดูอย่างเดียว ไม่ลบ