การลบสมาชิกออกจากอาร์เรย์ใน C#
อาร์เรย์ใน C# มีขนาดคงที่ (Fixed-size) ไม่สามารถลบสมาชิกได้โดยตรง ต้องทำการ Shift Element (เลื่อนค่าที่อยู่หลังตำแหน่งที่ลบ ไปทางซ้าย) และอาจสร้างอาร์เรย์ใหม่ขนาดเล็กลง
อัลกอริทึมการลบ
- ตรวจสอบ Index ว่าถูกต้อง (0 ถึง Length-1)
- Shift Element:
arr[i] = arr[i + 1]สำหรับ i จาก Index ถึง Length-2 - (ทางเลือก) สร้างอาร์เรย์ใหม่ขนาด Length-1 และ Copy ข้อมูล
ตัวอย่าง: Shift ในอาร์เรย์เดิม
using System;
namespace Demo
{
class Program
{
static void Main()
{
int[] arr = new int[5] { 35, 50, 55, 77, 98 };
int pos = 2; // ลบตำแหน่งที่ 2 (Index 1) = ค่า 50
Console.WriteLine("Before deletion:");
for (int i = 0; i < arr.Length; i++)
Console.WriteLine($"Element[{i}]: {arr[i]}");
// Shift elements left
for (int i = pos - 1; i < arr.Length - 1; i++)
{
arr[i] = arr[i + 1];
}
Console.WriteLine("\nAfter deletion (last element duplicated):");
for (int i = 0; i < arr.Length - 1; i++) // แสดงแค่ 4 ตัวแรก
Console.WriteLine($"Element[{i}]: {arr[i]}");
// ถ้าต้องการอาร์เรย์ขนาดเล็กลงจริง ใช้ Array.Resize หรือ List
Array.Resize(ref arr, arr.Length - 1);
Console.WriteLine($"\nResized array length: {arr.Length}");
}
}
}
ผลลัพธ์
Before deletion:
Element[0]: 35
Element[1]: 50
Element[2]: 55
Element[3]: 77
Element[4]: 98
After deletion (last element duplicated):
Element[0]: 35
Element[1]: 55
Element[2]: 77
Element[3]: 98
Resized array length: 4
วิธีที่ดีกว่า: ใช้ List<T>
var list = new List { 35, 50, 55, 77, 98 };
list.RemoveAt(1); // ลบ Index 1 (ค่า 50) - อัตโนมัติ Shift และ Resize
// list: 35, 55, 77, 98
สรุป
- อาร์เรย์: ต้อง Shift เอง, Resize ด้วย
Array.Resize - List<T>: ใช้
RemoveAt,Removeได้โดยตรง แนะนำสำหรับข้อมูลที่เปลี่ยนแปลงบ่อย - LINQ:
arr.Where((val, idx) => idx != indexToRemove).ToArray()(สร้างอาร์เรย์ใหม่)