Generic Collections
ในบทนี้ คุณจะได้รู้จักกับ Collections ในภาษา C# และการใช้งาน Collections ประเภทต่างๆ ที่มีความจำเป็นในสภานะการณ์ที่แตกต่างกัน
Collections (คอลเล็กชัน) หรือ Generic Collections นั้นเป็นไลบรารี่ของภาษา C# ที่มีอยู่แล้ว ซึ่งเราสามารถที่จะนำมาใช้งานได้เลย โดยมันจะอยู่ภายใน Namespace System.Collections.Generic
อย่างไรก็ตาม เราจะพูดถึงเฉพาะ Collection ที่มีการใช้บ่อยๆ ที่สุดเท่านั้น โดยรูปแบบการใช้งาน Generic Collections จะเป็นดังนี้
Type<Data_type> collection_name = new Type<Data_type>();
การใช้ List
List (ลิสต์) นั้นเป็นโครงสร้างข้อมูลที่ใช้ในการเก็บข้อมูลแบบเป็นลำดับ โดยมันมาแทน ArrayList ที่ถูกเลิกใช้ไปตั้งแต่ .Net Framework 2.0 สิ่งแตกต่างของมันกับอาเรย์คือ มันสามารถเก็บข้อมูลได้แบบไดนามิกส์ หรือเพิ่มขึ้นเรื่อยๆ โดยที่เราไม่ต้องบอกขนาดล่วงหน้า และเช่นเดียวกัน Collections ทกตัวนั้นเป็นไดนามิกส์ทั้งหมด
ต่อไปมาดูตัวอย่างการใช้ List ในภาษา C#
using System;
using System.Collections.Generic;
namespace CollectionsExample
{
class Program
{
static void Main(string[] args)
{
List<int> number = new List<int>();
number.Add(1);
number.Add(3);
number.Add(5);
number.Add(7);
number.Add(9);
for (int i = 0; i < number.Count; i++) {
int n = number.ElementAt<int>(i);
Console.Write("{0}, ", n);
}
}
}
}
จากตัวอย่าง เราได้สร้าง List ขึ้นมาโดยลิสต์นี้จะใช้เก็บข้อมูลประเภท Integer
โดยลิสต์ของเรานั้นจะมีขนาดเป็นแบบไดนามิกส์
List<int> number = new List<int>();
คุณสามารถเพิ่มข้อมูลเข้าไปในลิสต์ได้ไม่จำกัด โดยใช้เมธอด Add()
และพารามิเตอร์นั้นเป็นข้อมูลชนิด Integer ที่คุณได้ประกาศไว้ในตอนแรก ในตัวอย่างเราได้เพิ่มเข้าไป 5 หมายเลข
number.Add(1);
number.Add(3);
number.Add(5);
number.Add(7);
number.Add(9);
ต่อมาเป็นการแสดงผลข้อมูลในลิส โดยCount;
นั้นเป็นตัวแปรที่ใช้สำหรับรับค่าขนาดของลิสต์มา และเมธอด ElementAt<int>()
สำหรับการนำข้อมูลออกจาก List โดยมีพารามิเตอร์เป็น index ของมัน
for (int i = 0; i < number.Count; i++) {
int n = number.ElementAt<int>(i);
Console.Write("{0}, ", n);
}
ข้างล่างนี้ผมเป็นรันของโปรแกรม ที่แสดงข้อมูลทั้งหมดภายใน List โดยการใช้คำสั่ง for loop ในการแสดงผล
1, 3, 5, 7, 9,
การใช้ Dictionary
Dictionary เป็น Generic ชนิดหนึ่งในภาษา C# ที่เก็บข้อมูลเป็นแบบคูอันดับของ Key และ Value นั่นหมายความว่ามันใช้ Key เป็น index เพื่อนำข้อมูลมาใช้ มันมักจะถูกนำมาใช้ในงานกรณีที่ Key นั้นเป็นข้อมูลชนิดอื่นๆ เช่น String ซึ่งมันรวดเร็วและสะดวก
มาดูตัวอย่างการใช้งาน Dictionary ในภาษา C#
using System;
using System.Collections.Generic;
namespace CollectionExample2
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> country = new Dictionary<string, string>();
country.Add("us", "United State");
country.Add("uk", "Ukrain");
country.Add("be", "Belgium");
country.Add("gr", "Greece");
// Get key and value from KeyValuePair object
foreach (KeyValuePair<string, string> cnt in country)
{
Console.WriteLine("Key = {0}, Value = {1}", cnt.Key, cnt.Value);
}
// Direct access the value via key
country["gr"] = "GREECE";
Console.WriteLine("\nuk = " + country["uk"]);
Console.WriteLine("gr = " + country["gr"]);
// Remove string object via key
country.Remove("us");
if (!country.ContainsKey("us"))
{
Console.WriteLine("\nKey \"us\" is not found.");
}
Console.WriteLine("\nCount = " + country.Count);
}
}
}
จากตัวอย่างข้างบน เราได้สร้าง Dictionary ชื่อมีชื่อว่า country
โดยมี Key และ Value เป็น string เพื่อสำหรับเก็บข้อมูลตัวย่อและชื่อของประเทศนั้นๆ ด้วยคำสั่ง
Dictionary<string, string> country = new Dictionary<string, string>();
หลังจากนั้นเราใช้ฟังก์ชัน Add(para1, para2)
ในการเพิ่มข้อมูล โดยมันจะมีพารามิเตอร์ของตัวคือ Key และ Value ของมัน ซึ่งแตกต่างจาก Generic แบบ List เล็กน้อย และเราได้ใช้ foreach
ในการวนอ่านค่าจาก Dictionary โดยอ่านมาเก็บไว้ในออบเจ็บ KeyValuePair
ที่ชื่อ cnt และเราสามารถเข้าถึง Key ได้โดย cnt.Key
และสำหรับ Value โดย cnt.Value
และแสดงผลมันออกมาทางหน้าจอ
foreach (KeyValuePair<string, string> cnt in country)
{
Console.WriteLine("Key = {0}, Value = {1}", cnt.Key, cnt.Value);
}
ต่อไปเป็นการเข้าถึงข้อมูลโดย Key โดยจะเข้าโดยชื่อตัวแปรและวงเล็บ []
จากตัวอย่างเราได้เปลี่ยนค่าให้กับสมาชิกที่มี Key เป็น gr ให้เป็นตัวพิมพ์ใหญ่ และแสดงผลมันออกมา
country["gr"] = "GREECE";
Console.WriteLine("\nuk = " + country["uk"]);
Console.WriteLine("gr = " + country["gr"]);
ต่อไปเราได้ใช้เมธอด Remove()
เพื่อลบ Key "us" ออกจาก Dictionary โดยใส่ Key ที่ต้องการลบเป็นพารามิเตอร์ และเราใช้เมธอด ContainsKey()
เพื่อตรวจสอบว่ามี Key นี้อยู่หรือไม่ ถ้าไม่มีจะแสดงผลว่า ไม่พบ Key
เนื่องจากมันเป็น Generic ที่ Implement มาจากคลาสเดียวกันคุณสามารถใช้ตัวแปร Count
เพื่อดูจำนวนใน Generic ชนิดต่างๆ ได้เสมอ และนี่เป็นผลลัพธ์เมื่อรันโปรแกรม
Key = us, Value = United State
Key = uk, Value = Ukrain
Key = be, Value = Belgium
Key = gr, Value = Greece
uk = Ukrain
gr = GREECE
Key "us" is not found.
Count = 3
มันยังมีเมธอดต่างๆ อีกมากมายที่คุณสามารถใช้ได้สำหรับ Generic แต่ละชนิดคุณสามารถตรวจสอบได้โดย Intellisense (code suggestion) ของโปรแกรม
Generic class ประเภทอื่นๆ
ในภาษา C# ยังมี Generic Collection แบบอื่นๆ อีกที่คุณสามารภใช้ได้ ตามรูปแบบของโปรแกรมของคุณ เช่น Stack
เป็นออบเจ็คข้อมูลแบบสมาชิกที่เข้าทีหลังจะออกมาก่อน หรือ Queue
สมาชิกที่เข้าก่อนจะออกจาก เป็นต้น
ในบทนี้คุณได้รู้จักกับ Generic พื้นฐานในภาษา C# และการใช้งานแบบต่างๆ และคุณสามารถดู Generic ทั้งหมดได้ที่นี่ https://msdn.microsoft.com/en-us/library/system.collections.generic(v=vs.110).aspx