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

ลบสมาชิกออกจากอาร์เรย์ใน C#

การลบสมาชิกออกจากอาร์เรย์ใน C#

อาร์เรย์ใน C# มีขนาดคงที่ (Fixed-size) ไม่สามารถลบสมาชิกได้โดยตรง ต้องทำการ Shift Element (เลื่อนค่าที่อยู่หลังตำแหน่งที่ลบ ไปทางซ้าย) และอาจสร้างอาร์เรย์ใหม่ขนาดเล็กลง

อัลกอริทึมการลบ

  1. ตรวจสอบ Index ว่าถูกต้อง (0 ถึง Length-1)
  2. Shift Element: arr[i] = arr[i + 1] สำหรับ i จาก Index ถึง Length-2
  3. (ทางเลือก) สร้างอาร์เรย์ใหม่ขนาด 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() (สร้างอาร์เรย์ใหม่)