บทช่วยสอน C # ArrayList พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

ArrayList ใน C# เป็นคอลเลกชันแบบไดนามิกจากเนมสเปซ System.Collections ที่เก็บองค์ประกอบเป็นอ็อบเจ็กต์ แตกต่างจากอาร์เรย์ตรงที่มันสามารถเพิ่มหรือลดขนาดได้ในขณะรันไทม์ และสามารถเก็บค่าจำนวนเต็ม สตริง และค่าบูลีนไว้ในลิสต์เดียวกันได้

  • 🔄 การปรับขนาดแบบไดนามิก: ArrayList จะเพิ่มและลบองค์ประกอบในขณะรันไทม์ ดังนั้นคุณจึงไม่สามารถกำหนดจำนวนรายการล่วงหน้าได้เหมือนกับอาร์เรย์
  • 📦 การจัดเก็บวัตถุ: แต่ละองค์ประกอบจะถูกจัดเก็บในรูปแบบของอ็อบเจ็กต์ ซึ่งทำให้ ArrayList หนึ่งตัวสามารถเก็บข้อมูลที่มีประเภทข้อมูลผสมกันได้ เช่น จำนวนเต็ม สตริง และบูลีน
  • วิธีการหลัก: Add, Insert, Remove, RemoveAt, Contains และ Sort ครอบคลุมการดำเนินการทั่วไปบน ArrayList
  • 📊 จำนวนและความจุ: คุณสมบัติ Count จะส่งคืนจำนวนรายการปัจจุบัน ในขณะที่ Capacity คือพื้นที่จัดเก็บที่จัดสรรไว้
  • ทางเลือกที่ทันสมัย: Microsoft แนะนำให้ใช้ List ทั่วไปสำหรับโค้ดใหม่ เนื่องจากจะเพิ่มความปลอดภัยของประเภทข้อมูลในระหว่างการคอมไพล์ และหลีกเลี่ยงการแปลงประเภทข้อมูล (boxing)
  • 🤖 ความช่วยเหลือจากเอไอ: GitHub Copilot สร้างโครงร่างโค้ด ArrayList และไปป์ไลน์ ML.NET ส่งข้อมูลผ่านประเภทคอลเลกชัน C#

ArrayList ใน C#

ArrayList ใน C # คืออะไร

คอลเลกชัน ArrayList มีลักษณะคล้ายกับ... อาร์เรย์ ชนิดข้อมูลใน C#- ความแตกต่างที่ใหญ่ที่สุดคือลักษณะไดนามิกของคอลเลกชันรายการอาร์เรย์

สำหรับอาร์เรย์ คุณต้องกำหนดจำนวนองค์ประกอบที่อาร์เรย์สามารถเก็บได้ในเวลาของการประกาศอาร์เรย์ แต่ในกรณีของคอลเลกชันรายการอาร์เรย์ ไม่จำเป็นต้องดำเนินการนี้ล่วงหน้า คุณสามารถเพิ่มหรือลบองค์ประกอบจากคอลเลกชันรายการอาร์เรย์ได้ตลอดเวลา มาดูการดำเนินการที่มีให้สำหรับคอลเลกชันรายการอาร์เรย์ในรายละเอียดเพิ่มเติม

การประกาศรายการอาร์เรย์

การประกาศของ ArrayList มีดังต่อไปนี้ รายการอาร์เรย์ถูกสร้างขึ้นด้วยความช่วยเหลือของประเภทข้อมูล ArrayList คำหลัก “ใหม่” ใช้เพื่อสร้างวัตถุของ ArrayList จากนั้นวัตถุจะถูกกำหนดให้กับตัวแปร a1 ตอนนี้ตัวแปร a1 จะถูกใช้เพื่อเข้าถึงองค์ประกอบต่างๆ ของรายการอาร์เรย์

ArrayList a1 = new ArrayList()

การเพิ่มองค์ประกอบให้กับอาร์เรย์

วิธีการเพิ่มใช้เพื่อเพิ่มองค์ประกอบให้กับ ArrayList วิธีการเพิ่มสามารถใช้เพื่อเพิ่มองค์ประกอบประเภทข้อมูลประเภทใดก็ได้ลงในรายการอาร์เรย์ ดังนั้นคุณสามารถเพิ่มจำนวนเต็ม สตริง หรือแม้แต่ค่าบูลีนลงในรายการอาร์เรย์ได้ ไวยากรณ์ทั่วไปของวิธีการบวกมีดังต่อไปนี้

ArrayList.add(element)

ด้านล่างนี้เป็นตัวอย่างวิธีการใช้เมธอด "เพิ่ม" วิธีการเพิ่มสามารถใช้เพื่อเพิ่มประเภทข้อมูลต่างๆ ให้กับคอลเลกชันรายการอาร์เรย์

ด้านล่างนี้คุณสามารถดูตัวอย่างวิธีที่เราสามารถเพิ่มสตริงของจำนวนเต็มและแม้แต่ค่าบูลีนให้กับคอลเลกชันรายการอาร์เรย์

  • a1.add(1) – สิ่งนี้จะเพิ่มค่าจำนวนเต็มให้กับคอลเลกชัน
  • a1.add("ตัวอย่าง") – สิ่งนี้จะเพิ่มค่า String ให้กับคอลเลกชัน
  • a1.add(true) – สิ่งนี้จะเพิ่มค่าบูลีนให้กับคอลเลกชัน

ตอนนี้เรามาดูการทำงานในระดับรหัสกัน โค้ดที่กล่าวถึงด้านล่างทั้งหมดจะถูกเขียนลงในแอปพลิเคชันคอนโซลของเรา รหัสจะถูกเขียนลงในไฟล์ Program.cs ของเรา

ในโปรแกรมด้านล่าง เราจะเขียนโค้ดเพื่อสร้างรายการอาร์เรย์ใหม่ นอกจากนี้เรายังจะแสดงเพื่อเพิ่มองค์ประกอบและเพื่อแสดงองค์ประกอบของรายการอาร์เรย์

ArrayList ใน C #

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1[0]);	  
   Console.WriteLine(a1[1]);
   Console.WriteLine(a1[2]);
   Console.ReadKey();
  }
 }
}

Code คำอธิบาย:-

  1. ขั้นตอนแรกใช้ในการประกาศรายการอาร์เรย์ของเรา ที่นี่เรากำลังประกาศ a1 เป็นตัวแปรเพื่อเก็บองค์ประกอบของรายการอาร์เรย์ของเรา
  2. จากนั้นเราใช้คีย์เวิร์ด add เพื่อเพิ่มหมายเลข 1, String “Example” และค่าบูลีน 'true' ลงในรายการอาร์เรย์
  3. จากนั้นเราใช้วิธี Console.WriteLine เพื่อแสดงค่าขององค์ประกอบรายการอาร์เรย์แต่ละรายการไปยังคอนโซล คุณจะสังเกตเห็นว่าเช่นเดียวกับอาร์เรย์ เราสามารถเข้าถึงองค์ประกอบต่างๆ ผ่านตำแหน่งดัชนีของมันได้ ดังนั้นในการเข้าถึงตำแหน่งแรกของรายการอาร์เรย์ เราใช้ตำแหน่งดัชนี [0] และอื่น ๆ และอื่น ๆ.

หากป้อนโค้ดด้านบนอย่างถูกต้องแล้วและรันโปรแกรมจะแสดงผลลัพธ์ต่อไปนี้

Output:

ArrayList ใน C #

จากเอาต์พุต คุณจะเห็นว่าองค์ประกอบทั้งหมดจากรายการอาร์เรย์ถูกส่งไปยังคอนโซล

ลองดูวิธีการเพิ่มเติมบางอย่างที่เป็นส่วนหนึ่งของ ArrayList

นับ

วิธีการนี้ใช้เพื่อรับจำนวนรายการในคอลเลกชัน ArrayList ด้านล่างนี้คือไวยากรณ์ทั่วไปของคำสั่งนี้

ArrayList.Count() – วิธีการนี้จะส่งคืนจำนวนองค์ประกอบที่มีอยู่ในรายการอาร์เรย์

ประกอบด้วย

วิธีการนี้ใช้เพื่อดูว่ามีองค์ประกอบอยู่ในคอลเลกชัน ArrayList หรือไม่ ด้านล่างนี้คือไวยากรณ์ทั่วไปของคำสั่งนี้

ArrayList.Contains(element) – เมธอดนี้จะคืนค่าเป็นจริงหากมีองค์ประกอบนั้นอยู่ในรายการ มิเช่นนั้นจะส่งคืนค่าเท็จ

ลบที่

วิธีการนี้ใช้ในการลบองค์ประกอบที่ตำแหน่งเฉพาะในคอลเลกชัน ArrayList ด้านล่างนี้คือไวยากรณ์ทั่วไปของคำสั่งนี้

ArrayList.RemoveAt(index) – วิธีนี้จะลบองค์ประกอบออกจากตำแหน่งเฉพาะของรายการอาร์เรย์

ตอนนี้เรามาดูการทำงานในระดับรหัสกัน โค้ดที่กล่าวถึงด้านล่างทั้งหมดจะถูกเขียนลงในแอปพลิเคชันคอนโซลของเรา รหัสจะถูกเขียนลงในไฟล์ Program.cs ของเรา

ในโปรแกรมด้านล่างเราจะเขียนโค้ดเพื่อดูว่าเราสามารถใช้วิธีการที่กล่าวมาข้างต้นได้อย่างไร

ArrayList ใน C #

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1.Count);
   Console.WriteLine(a1.Contains(2));
   Console.WriteLine(a1[1]);
   a1.RemoveAt(1);
   Console.WriteLine(a1[1]);
   Console.ReadKey();
  }
 }
}

Code คำอธิบาย:-

  1. คุณสมบัติแรกที่เราเห็นคือคุณสมบัติ Count เราได้รับคุณสมบัติ Count ของรายการอาร์เรย์ a1 แล้วเขียนลงในคอนโซล
  2. ในส่วนที่สอง เราใช้เมธอดประกอบด้วยเพื่อดูว่า ArrayList a1 มีองค์ประกอบ 2 หรือไม่ จากนั้นเราจะเขียนผลลัพธ์ไปยังคอนโซลโดยใช้คำสั่ง Writeline
  3. สุดท้ายนี้ เพื่อแสดงวิธีการลบองค์ประกอบ เรากำลังดำเนินการตามขั้นตอนด้านล่าง
    1. ขั้นแรก เราเขียนค่าขององค์ประกอบที่ตำแหน่งดัชนี 1 ของรายการอาร์เรย์ไปยังคอนโซล
    2. จากนั้นเราจะลบองค์ประกอบที่ตำแหน่งดัชนี 1 ของรายการอาร์เรย์
    3. สุดท้ายนี้ เราจะเขียนค่าขององค์ประกอบอีกครั้งที่ตำแหน่งดัชนี 1 ของรายการอาร์เรย์ไปยังคอนโซล ขั้นตอนชุดนี้จะให้แนวคิดที่ยุติธรรมว่าวิธีการลบจะทำงานตามที่ควรจะเป็นหรือไม่

หากป้อนโค้ดด้านบนอย่างถูกต้องแล้วและรันโปรแกรมจะแสดงผลลัพธ์ต่อไปนี้

Output:

ArrayList ใน C #

เหตุใดค่าสุดท้ายจึงเป็นจริง

หากคุณเห็นลำดับของเหตุการณ์ องค์ประกอบ Example จะถูกลบออกจากอาร์เรย์เนื่องจากอยู่ที่ตำแหน่ง 1 ตำแหน่งที่ 1 ของอาร์เรย์จะถูกแทนที่ด้วยสิ่งที่อยู่ในตำแหน่งที่ 2 ก่อนหน้าซึ่งค่า 'จริง'

วิธีการวนลูปผ่าน ArrayList ใน C#

การอ่านทุกองค์ประกอบใน ArrayList เป็นงานทั่วไป เนื่องจาก ArrayList เก็บรายการต่างๆ ในรูปแบบของอ็อบเจ็กต์ คุณจึงสามารถเข้าถึงรายการเหล่านั้นได้ด้วยลูป foreach หรือลูป for ที่ใช้คุณสมบัติ Count ลูป foreach เป็นวิธีที่ง่ายที่สุด เพราะมันจะวนไปตามแต่ละรายการตามลำดับโดยไม่จำเป็นต้องใช้ดัชนี

ตัวอย่างด้านล่างสร้าง ArrayList ของสตริงและพิมพ์แต่ละค่าลงในบรรทัดแยกกัน โค้ดนี้เขียนอยู่ในไฟล์ Program.cs ของแอปพลิเคชันคอนโซล

ขั้นตอน 1) นำเข้าเนมสเปซ System.Collections และสร้าง ArrayList ที่มีสามรายการ

ขั้นตอน 2) ใช้ลูป foreach เพื่ออ่านแต่ละองค์ประกอบเป็นอ็อบเจ็กต์แล้วเขียนลงในคอนโซล

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add("Java");
   a1.Add("Python");
   a1.Add("Kotlin");
   foreach (object item in a1)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Code คำอธิบาย:-

  1. มีการนำเข้าเนมสเปซ System.Collections เพื่อให้โปรแกรมสามารถใช้งานประเภท ArrayList ได้
  2. มีการเพิ่มค่าสตริงสามค่าลงใน ArrayList โดยใช้เมธอด Add
  3. ลูป foreach จะอ่านแต่ละรายการเป็นอ็อบเจ็กต์ และเมธอด Console.WriteLine จะพิมพ์รายการนั้นลงในบรรทัดใหม่

เมื่อโปรแกรมทำงาน มันจะพิมพ์... Java, Pythonและ คอตลิน ในบรรทัดแยกกัน การใช้ลูป for ร่วมกับคุณสมบัติ Count จะให้ผลลัพธ์เดียวกัน และยังช่วยให้คุณสามารถใช้ตำแหน่งดัชนีของแต่ละองค์ประกอบได้ด้วย

เมธอดและคุณสมบัติของ ArrayList ใน C#

คลาส ArrayList มีเมธอดและคุณสมบัติในตัวมากมายสำหรับจัดการองค์ประกอบต่างๆ นอกเหนือจากการเพิ่มและลบรายการแล้ว ยังสามารถเรียงลำดับ ค้นหา และกลับลำดับของคอลเลกชันได้อีกด้วย สมาชิกที่ใช้บ่อยที่สุดมีดังต่อไปนี้

สมาชิกทั่วไป Descriptไอออน
เพิ่ม เพิ่มองค์ประกอบเดียวลงในส่วนท้ายของ ArrayList
สิ่งที่ใส่เข้าไป เพิ่มองค์ประกอบที่ตำแหน่งดัชนีที่ระบุ
ลบรายการออกจากรถเข็น ลบองค์ประกอบที่ระบุครั้งแรกออก
ลบที่ ลบองค์ประกอบที่ตำแหน่งดัชนีที่กำหนด
ล้างข้อมูล ลบองค์ประกอบทั้งหมดออกจาก ArrayList
ประเภท จัดเรียงองค์ประกอบตามลำดับจากน้อยไปมาก
Reverse Reverseลำดับขององค์ประกอบในรายการ
ประกอบด้วย ส่งคืนค่าจริงหากองค์ประกอบที่กำหนดมีอยู่ในรายการ
ดัชนีของ ส่งคืนตำแหน่งดัชนีขององค์ประกอบที่กำหนด
นับ คุณสมบัติที่ส่งคืนจำนวนองค์ประกอบที่จัดเก็บไว้
ความจุ คุณสมบัติที่ส่งคืนจำนวนองค์ประกอบที่รายการสามารถเก็บได้

สมาชิกเหล่านี้ช่วยให้คุณสามารถเพิ่ม ค้นหา จัดลำดับ และลบรายการได้โดยไม่ต้องเขียนตรรกะด้วยตนเอง ซึ่งเป็นหนึ่งในข้อได้เปรียบหลักของการใช้คอลเลกชันเหนืออาร์เรย์ธรรมดา

ความแตกต่างระหว่าง ArrayList และ List ใน C#

ทั้ง ArrayList และแบบทั่วไป รายการ ทั้งสองแบบใช้เก็บกลุ่มของรายการที่สามารถขยายขนาดได้ในระหว่างการทำงาน แต่มีวิธีการจัดการประเภทข้อมูลที่แตกต่างกัน การรู้ความแตกต่างนี้จะช่วยให้คุณเลือกใช้แบบที่เหมาะสมสำหรับโค้ด C# ในปัจจุบัน

ความแตกต่างหลักๆ มีดังต่อไปนี้:

  • ความปลอดภัยประเภท: ArrayList เก็บทุกรายการเป็นอ็อบเจ็กต์ ในขณะที่ List ผูกกับประเภทที่ประกาศไว้เพียงประเภทเดียวและจะถูกตรวจสอบในระหว่างการคอมไพล์
  • ประสิทธิภาพ: ArrayList มีการแปลงค่าประเภทต่างๆ เช่น int เป็น boxing และ unboxing ซึ่งทำให้เสียเวลา ในขณะที่ List หลีกเลี่ยงการแปลงค่าประเภทต่างๆ ทำให้ทำงานได้เร็วกว่า
  • Namespace: ArrayList อยู่ใน System.Collections ในขณะที่ List อยู่ใน System.Collections.Generic
  • หล่อ: การอ่านข้อมูลจาก ArrayList มักจะต้องแปลงกลับไปเป็นชนิดข้อมูลเดิม แต่ List จะคืนค่าชนิดข้อมูลที่ถูกต้องโดยตรง
  • คำแนะนำ: Microsoft แนะนำให้ใช้ List สำหรับการพัฒนาใหม่ เนื่องจากปลอดภัยกว่า เร็วกว่า และอ่านง่ายกว่า

กล่าวโดยสรุป ArrayList มีประโยชน์สำหรับการทำความเข้าใจโค้ดเก่าๆ หรือการจัดเก็บข้อมูลแบบผสมชนิด ในขณะที่ List เป็นตัวเลือกที่นิยมใช้สำหรับแอปพลิเคชันส่วนใหญ่ในปัจจุบัน

คำถามที่พบบ่อย

อาร์เรย์มีขนาดคงที่และเก็บข้อมูลประเภทเดียวที่กำหนดไว้ตอนประกาศ ในขณะที่ ArrayList จะขยายและหดตัวได้ในขณะรันไทม์ และเก็บแต่ละรายการเป็นอ็อบเจ็กต์ ดังนั้นจึงสามารถเก็บข้อมูลหลายประเภทไว้ในรายการเดียวได้

ArrayList ยังคงอยู่ แต่... Microsoft ไม่แนะนำให้ใช้สำหรับการพัฒนาใหม่ คลาส List ทั่วไปใน System.Collections.Generic นั้นดีกว่า เพราะเพิ่มความปลอดภัยของประเภทข้อมูลและประสิทธิภาพที่ดีกว่า ดังนั้นโค้ด C# สมัยใหม่ส่วนใหญ่จึงใช้ List แทน

เนื่องจาก ArrayList จัดเก็บรายการในรูปแบบของอ็อบเจ็กต์ การเพิ่มค่าประเภท เช่น int จะห่อหุ้มค่าดังกล่าวไว้ในอ็อบเจ็กต์อีกชั้นหนึ่ง ซึ่งเรียกว่า boxing การอ่านค่ากลับมาและแปลงกลับไปเป็นประเภทเดิมเรียกว่า unboxing ซึ่งทั้งสองขั้นตอนนี้ส่งผลต่อประสิทธิภาพการทำงาน และ List สามารถหลีกเลี่ยงปัญหานี้ได้

ArrayList รองรับการอ่านพร้อมกันได้หลายคน แต่ไม่รับประกันว่าสมาชิกในอินสแตนซ์จะปลอดภัยต่อการทำงานแบบมัลติเธรดเมื่อมีการแก้ไขคอลเลกชัน หากต้องการเขียนข้อมูลแบบมัลติเธรดอย่างปลอดภัย ควรห่อหุ้มด้วย ArrayListSyncใช้วิธีการซิงโครไนซ์ หรือใช้การรวบรวมแบบพร้อมกันแทน

Count คือจำนวนองค์ประกอบที่จัดเก็บอยู่ใน ArrayList ในปัจจุบัน Capacity คือจำนวนองค์ประกอบทั้งหมดที่สามารถจัดเก็บได้ก่อนที่จะมีการปรับขนาด Capacity จะมีค่าเท่ากับหรือมากกว่า Count เสมอ และจะเพิ่มขึ้นโดยอัตโนมัติเมื่อเพิ่มรายการเข้าไป

คุณสามารถคัดลอกรายการลงใน List ที่กำหนดประเภทอย่างชัดเจนโดยใช้เมธอด Cast และ ToList หรือเรียกใช้เมธอด ToArray เพื่อรับอาร์เรย์ของอ็อบเจ็กต์ การแปลงเป็น List ทั่วไปนั้นเป็นเรื่องปกติเพราะจะช่วยคืนค่าความปลอดภัยของประเภทข้อมูล

ใช่แล้ว GitHub Copilot สามารถเขียนการประกาศ ArrayList เพิ่มและลบการเรียกใช้ และลูปได้จากข้อความแสดงความคิดเห็นสั้นๆ หรือชื่อเมธอด นอกจากนี้ยังมักแนะนำเวอร์ชัน List ทั่วไปด้วย เนื่องจากเป็นคอลเลกชันที่แนะนำสำหรับโค้ด C# ใหม่ๆ

ML.NET มักจะอ่านข้อมูลฝึกฝนผ่านคอลเลกชันทั่วไป เช่น List และ IEnumerable ซึ่งแมปกับไปป์ไลน์ IDataView ของมัน แทบจะไม่ใช้ ArrayList ที่ไม่ใช่แบบทั่วไปโดยตรง เพราะคอลเลกชันที่มีการกำหนดประเภทอย่างชัดเจนจะช่วยให้ข้อมูลสำหรับการเรียนรู้ของเครื่องมีความชัดเจนและปลอดภัยในด้านประเภทข้อมูล

สรุปโพสต์นี้ด้วย: