ในการเขียนโปรแกรม โดยปกติแล้ว เราจะสร้างตัวแปรขึ้นมาเพื่อเก็บข้อมูล ตัวอย่างเช่น สร้างตัวแปรที่ชื่อว่า name ไว้เก็บชื่อของนักเรียน
string name = "You";
ตัวแปร name เก็บข้อมูลประเภท string และเก็บคำว่า You หมายความว่าตัวแปร name นี่เก็บชื่อของนักเรียนที่ชื่อว่า You แต่ถ้าผมต้องการเก็บชื่อนักเรียนคนอื่นที่อยู่ในห้องเดียวกันกับนักเรียนคนนี้ จะทำอย่างไร ก็ต้องประกาศตัวแปรเพิ่มอีก ถ้านักเรียนในห้องมี 30 คนก็ต้องประกาศตัวแปร 30 ตัวดังนี้
ผมขอเปลี่ยน name เป็น name1 เพื่อให้สอดคล้องกับตัวแปรอื่นนะครับ
string name1 ="You";
string name2 = "Noo";
......
string Name30 = "Bank";
ดังนั้น เราต้องประกาศตัวแปรถึง 30 ตัวเพื่อเก็บชื่อนักเรียน 30 คน แล้วถ้าเราเขียนโปรแกรมเก็บข้อมูลชื่อนักเรียนทั้งโรงเรียนหล่ะ ก็คงต้องสร้างตัวแปรเป็นพันตัวเลย ซึ่งก็คงไม่ใช้งานที่สนุกแน่ๆ
สมมติว่าตอนนี้เรามีรายชื่อของนักเรียนเก็บไว้ในตัวแปรหมดแล้ว จะแสดงผลออกมาที่หน้าจอต้องทำอย่างไร ? ผมขอยกตัวอย่างชื่อนักเรียน 5 คนเพื่อประหยัดเวลาและพื้นที่ในการเขียนโปรแกรมนะครับ
string name1 = "You";
strign name2 = "Noo";
string name3 = "Poom";
string name4 ="Off";
string name5 = "Bank";
Console.WriteLine(name1);
Console.WriteLine(name2);
Console.WriteLine(name3);
Console.WriteLine(name4);
Console.WriteLine(name5);
ในตัวอย่างเก็บข้อมูลชื่อนักเรียน 5 คน จะแสดงผลอออกมาที่หน้าจอ ก็ต้องใช้คำสั่ง Console.WriteLine 5 ครั้ง แต่ถ้าเก็บต้องการแสดงผลชื่อนักเรียน 30 คน ก็คงต้องใช้คำสั่ง Console.WriteLine 30 ครั้งเลยทีเดียว เนื่องจากตัวแปรแต่ละตัวในตัวอย่างที่ผ่านมาสร้างขึ้นมาเพื่อเก็บชื่อของนักเรียนแต่ละคน จะดีกว่าไหมหากเรามีตัวแปรสักตัวหนึ่งที่สามารถเก็บชุดข้อมูลที่เป็นประเภทเดียวกันได้ ตัวแปรเพียงตัวเดียวที่เก็บข้อมูลนักเรียนได้ทั้งชั้นเรียน หรือทั้งโรงเรียน
ด้วยเหตุนี้ในภาษา C# หรือภาษาอื่นๆ มีประเภทข้อมูลแบบพิเศษที่เรียกว่า อารย์ (array) ซึ่งเป็นประเภทข้อมูลที่สามารถเก็บข้อมูลแบบเดียวกันได้หลายค่า กล่าวได้อีกอย่างหนึ่งว่า ประกาศตัวแปรแบบอาเรย์เพียงหนึ่งตัวก็ใช้เก็บค่าได้หลายค่า ต่างกับตัวแปรแบบทั่วไปที่ไปที่เก็บข้อมูลได้เพียงแค่ค่าเดียว ในตัวอย่างที่ผ่านหากต้องการเก็บข้อมูลชื่อนักเรียน 30 คน สร้างตัวแปรอาเรย์เพียงตัวเดียวก็สามารถเก็บชื่อนักเรียนทั้งหมดได้ ไม่จำเป็นต้องสร้างตัวแปรแบบ string 30 ตัว
ก่อนที่จะใช้อาเรย์ เรามาดูการประกาศตัวแปรอาเรย์กันก่อนนะครับ ว่าสร้างกันอย่างไร
รูปแบบการประกาศตัวแปรแบบอาเรย์
ประเภทข้อมูล[] ชื่อตัวแปร;
การประกาศตัวแปรอารย์มีรูปแบบการประกาศเหมือนกับกาศตัวแปรแบบปกติ ต่างกันที่หลังประเภทข้อมูลที่ตัวแปรสามารถเก็บได้ ต้องมีเครื่องหมาย [] วงเล็บวงเล็บเหลี่ยม (square bracket)
ตัวอย่างการประกาศอาเรย์เพื่อเก็บชื่อนักเรียน
string[] studentNames;
ที่ผ่านมาเป็นเพียงการประกาศตัวแปรแบบอาเรย์ ยังเก็บข้อมูลจริงๆ ไม่ได้ ก่อนที่เราจะเก็บชื่อนักเรียนได้จำเป็นต้องสร้างอาเรย์ขึ้นมาก่อน ซึ่งทำได้ดังนี้
new ประเภทข้อมูลที่จะเก็บในอาเรย์[ขนาดของอาเรย์]
ดังนั้น การสร้างอาเรย์เพื่อเก็บชื่อนักเรียนห้าคนจึงเขียนเป็นคำสั่งได้ดังนี้
string[] studentNames;
studentNames = new string[5];
หลังจากที่สร้างอาเรย์แล้ว เราก็สามารถใช้ตัวแปร studentNames ไปเก็บชื่อนักเรียนได้ครับ
ข้อมูลที่เก็บในอาเรย์จะถือเป็นสมาชิกของอาเรย์ และจะมีตำแหน่งที่ถูกเก็บไว้ในอาเรย์ และตำแหน่งที่เก็บสมาชิกจะเริ่มต้นที่ 0 ดั้งนั้น สมาชิกตัวที่ 1 ของอารย์จะถูกเก็บที่ตำแหน่งที่ 0 การเก็บค่าหรือการดึงค่าออกมาจากอารย์จึงต้องมีการอ้างตำแหน่งที่เก็บข้อมูล
ตัวอย่างเช่น การเก็บข้อมูลชื่อนักเรียนเข้าตำแหน่งที่ 0
studentNames[0] = "You";
ชื่อตัวแปรอารย์ตามด้วยเครื่องหมาย [...] และภายใน [...] ระบุตำแหน่งที่จะเก็บข้อมูล ในทางตรงข้าม การนำค่าออกมาจากอาเรย์จะเขียนคำสั่งได้ดังนี้
string student1 = studentNames[0];
หมายความว่าประกาศตัวแปรชื่อว่า student1 ให้เก็บชื่อนักเรียนที่อยู่ในตำแหน่งที่ 0 ของอาเรย์ เมื่อตำแหน่งที่ 0 ของอาเรย์เก็บค่า "You" หลังจากที่คำสั่งข้างต้นถูกเรียกใช้งานตัวแปร student1 ก็จะเก็บคำว่า "You"
ในขึ้นตอนการสร้างอาเรย์ เราได้ทำการระบุขนาดของอาเรย์ไว้ new string[5]; หมายความว่าอาเรย์นี้เก็บข้อความได้ 5 ตัว ไม่สามารถเก็บได้มากกว่านี้ได้ เป็นการกำหนดขนาดแน่นอนตายตัว ดังนั้นตำแหน่งการเก็บข้อมูลจึงมีตำแหน่งที่ 0 - 4 เพราะตำแหน่งการเก็บข้อมูลของอาเรย์เริ่มที่ 0
ตัวอย่าง เก็บชื่อนักเรียนทั้ง 5 คนเข้าไปในตัวแปรอาเรย์
studentNames[0] = "You";//สมาชิกตัวที่ 1 ตำแหน่งที่ 0
studentNames[1] = "Noo"; //สมาชิกตัวที่ 2 ตำแหน่งที่ 1
studentNames[2] = "Poom"; //สมาชิกตัวที่ 3 ตำแหน่งที่ 2
studentNames[3] = "Off"; //สมาชิกตัวที่ 4 ตำแหน่งที่ 3
studentNames[4] = "Bank"; //สมาชิกตัวที่ 5 ตำแหน่งที่ 4
หากต้องการหาขนาดของอาเรย์เพื่อบอกว่าอาเรย์นี้สามารถเก็บข้อมูลได้กี่ตัว ทำได้โดยใช้คำสั่งดังต่อไปนี้
ตัวแปรอาเรย์.Length ตัวอย่าง
Console.WriteLine(studentNames.Lenght);
ผลลัพธ์
5
ตัวอย่าง การนำค่าสมาชิกของอาเรย์มาแสดงผลลัพธ์ที่หน้าจอด้วยการใช้ for
for(int i =0; i < studentNames.Length; i++)
{
Console.WriteLine(studentNames[i]);
}
คำสั่งประกาศอาเรย์ สร้างอาเรย์ นำค่าไปเก็บไว้อาเรย์และนำค่าออกมา
static void Main(string[] args)
{
string[] studentNames;
studentNames = new string[5];
studentNames[0] = "You";//สมาชิกตัวที่ 1 ตำแหน่งที่ 0
studentNames[1] = "Noo"; //สมาชิกตัวที่ 2 ตำแหน่งที่ 1
studentNames[2] = "Poom"; //สมาชิกตัวที่ 3 ตำแหน่งที่ 2
studentNames[3] = "Off"; //สมาชิกตัวที่ 4 ตำแหน่งที่ 3
studentNames[4] = "Bank"; //สมาชิกตัวที่ 5 ตำแหน่งที่ 4
for (int i = 0; i < studentNames.Length; i++)
{
Console.WriteLine(studentNames[i]);
}
}
ผลลัพธ์
You
Noo
Poom
Off
Bank
จะเห็นได้ว่าการนำอาเรย์เข้ามาใช้งานในโปรแกรมนั้นมีขั้นตอนหลักๆ ดังนี้
ประกาศตัวแปรอาเรย์ สร้างอาเรย์ เข้าใจวิธีการนำค่าไปเก็บไว้ในอาเรย์ และดึงค่าที่อาเรย์เก็บไว้ออกมา ในตัวอย่างที่ผ่านมาเราได้ทำการสร้างอาเรย์และใช้งานอาเรย์หนึ่งมิติ
ก่อนอื่นเรามาทำความเข้าใจกับคำว่ามิติกันก่อนนะครับ มิติ หมายถึงจำนวนของค่าที่ใช้ระบุตำแหน่งของสมาชิกในอาเรย์ อาร์เรย์หนึ่งมิติ คือ ตัวแปรอาร์เรย์ที่เก็บข้อมูลในลักษณะเป็นแถวเดียว (วางตามนอน) หรือคอลัมน์เดียว (วางตามตั้ง) ค่าที่ใช้ระบุตำแหน่งของสมาชิกในอาเรย์มีเพียงค่าเดียว การมองว่าเป็นอาร์เรย์มิติเดียวหรือไม่ พิจารณาได้ดังรูปต่อไปนี้
นอกจากอาเรย์หนึ่งมิติแล้วในภาษา C# ก็ยังมีอาเรย์หลายมิติด้วย
อาเรย์หลายมิติ คือ อาร์เรย์ตั้งแต่สองมิติเป็นต้นไป
อาเรย์สองมิติ หมายถึงตัวแปรอาร์เรย์ที่ระบุตำแหน่งการเก็บข้อมูลสมาชิกของอาเรย์ด้วยแถวและคอลัมน์ อาเรย์สามมิติ นอกจากตำแหน่งที่เก็บสมาชิกจะระบุด้วยด้วยแถวและคอลัมน์แล้วก็จะระบุว่าเก็บที่ระนาบใดด้วย
ในตัวอย่างที่ผ่านมาถือว่า เราได้เรียนรู้วิธีการสร้างอาเรย์แบบหนึ่งมิติไปแล้ว ดังนั้นต่อไปเราจะมาดูวิธีการสร้างตัวแปรแบบสองมิติกัน
ประเภทข้อมูล[,] ชื่อตัวแปร;
การประกาศตัวแปรอารย์มีรูปแบบการประกาศเหมือนกับกาศตัวแปรอาเรย์หนึ่งมิต ต่างกันที่หลังประเภทข้อมูลต้องมีเครื่องหมาย [] วงเล็บวงเล็บเหลี่ยม 2 ตัว
new ประเภทข้อมูล[ขนาดของแถว][ขนาดของหลัก];
เนื่องจากอาเรย์สองมิติจะใช้แถวและหลักในการระบุตำแหน่งที่เก็บสมชิกของอาเรย์ ดังนั้นการสร้างตัวอาเรย์สองมิติจึงต้องบอกจำนวนแถว (row) และหลัก (column) ว่าอาเรย์นี้มีกี่แถวและมีกี่หลัก
การนำไปใช้ ยกตัวอย่างการเก็บข้อมูลชื่อนักเรียนด้วยอาเรย์หนึ่งมิติในตัวอย่างที่ผ่านมา หากต้องที่จะเก็บข้อมูลนักเรียนทั้งชื่อและเลขประจำตัวหากเราใช้เพียงแค่อาเรย์หนึ่งมิติต้องทำอย่างไร
เก็บชื่อและเลขประจำตัวนักเรียนแต่ละคนไว้ในตัวแปรอาเรย์หนึ่งมิตร เพื่อความสะดวกในการเขียนโปรแกรมเราสามารถที่จะรวมขั้นตอนการประกาศตัวแปรอาเรย์และการสร้างอาเรย์ไว้บรรทัดเดียวกันได้
string[] student1 = new string[2]; //เก็บข้อความได้ 2 ตัว (ชื่อและเลขประจำตัว)
student1[0] = "You";
student1[1] = "1001";
string[] student2 = new string[2];
student2[0] = "Noo";
student2[1] = "1002";
string[] student3 = new string[2];
student3[0] = "Poom";
student3[1] = "1003";
string[] student4 = new string[2];
student4[0] = "Off";
student4[1] = "1004";
string[] student5 = new string[2];
student5[0] = "Bank";
student5[1] = "1005";
กลายเป็นว่าเราต้องใช้ตัวแปร 5 ตัวเพื่อที่จะเก็บข้อมูลชื่อและนามสกุล แต่ถ้าเรามองข้อมูลที่จะเก็บในลักษณะของแถวและหลัก โดยที่แถวคือนักเรียนแต่ละคน หลักคือ ชื่อและเลขประจำตัว เราก็สามารถที่จะใช้อาเรย์สองมิติเพียงตัวเดียวเพื่อเก็บข้อมูลในตัวอย่างที่ผ่านมาได้
string[,] students = new string[5, 2]; // แถว นักเรียน 5 คน หลัก 2 ชื่อและเลขประจำตัว
students[0, 0] = "You";
students[0, 1] = "1001";
students[1, 0] = "Noo";
students[1, 1] = "1002";
students[2, 0] = "Poom";
students[2, 1] = "1003";
students[3, 0] = "Off";
students[3, 1] = "1004";
students[4, 0] = "Bank";
students[4, 1] = "1005";
เมื่อเราเก็บข้อมูลในอาเรย์สองมิติ การนำผลลัพธ์ออกมาแสดงผล
for (int r = 0; r < 5; r++)//วนจำตามนวนแถว
{
for (int c = 0; c < 2; c++)//วนตามจำนวนคอลัมน์
{
Console.Write(students[r, c] + "\t");
}
Console.WriteLine();
}
นำมาเขียนรวมกัน
string[,] students = new string[5, 2]; // แถว นักเรียน 5 คน หลัก 2 ชื่อและเลขประจำตัว
students[0, 0] = "You";
students[0, 1] = "1001";
students[1, 0] = "Noo";
students[1, 1] = "1002";
students[2, 0] = "Poom";
students[2, 1] = "1003";
students[3, 0] = "Off";
students[3, 1] = "1004";
students[4, 0] = "Bank";
students[4, 1] = "1005";
for (int r = 0; r < 5; r++)//วนจำตามนวนแถว
{
for (int c = 0; c < 2; c++)//วนตามจำนวนคอลัมน์
{
Console.Write(students[r, c] + "\t");
}
Console.WriteLine();
}
ผลลัพธ์
You 1001
Noo 1002
Poom 1003
Off 1004
Bank 1005
สำหรับอาเรย์สามิตินั้นจะไม่ขอยกตัวอย่างเนื่องจากไม่ค่อยได้ใช้
ตัวแปรอาเรย์.Rank
ตัวอย่างเช่น
Console.WriteLine(students.Rank);
การกำหนดค่าเริ่มต้นให้กับอาเรย์
C# ได้อำนวยความสะดวกให้ในการสร้างอาเรย์โดยสามารถกำหนดค่าสมาชิกของอาเรย์ได้ในขั้นตอนที่สร้างอาเรย์เลย จากตัวอย่างผ่านมาเราสามารถสร้างอาเรย์และกำหนดค่าสมาชิกของอาเรย์ได้ทันที
ตัวอย่างอาเรย์หนึ่งมิติ
string[] studentNames = new string[5] { "You", "Noo", "Poom", "Off", "Bank" };
ตัวอย่างอาเรย์สองมิติ
string[,] students = new string[5, 2] { { "You", "1001" }, { "Noo", "1002" }, { "Poom", "1003" }, { "Off", "1004" }, { "Bank", "1005" } };
เราสามารถที่จะละขนาดของอาเรย์ได้ ขนาดของอาเรย์จึงจะถูกคำนวนจากสมาชิกที่ได้กำหนดพร้อมกับการสร้างอาเรย์
string[] studentNames = new string[] { "You", "Noo", "Poom", "Off", "Bank" };
string[,] students = new string[,] { { "You", "1001" }, { "Noo", "1002" }, { "Poom", "1003" }, { "Off", "1004" }, { "Bank", "1005" } };
มากไปกว่านั้น เรายังสามารถละ new และประเภทข้อมูลของอาเรย์ได้อีกด้วย
string[] studentNames = { "You", "Noo", "Poom", "Off", "Bank" };
string[,] students = { { "You", "1001" }, { "Noo", "1002" }, { "Poom", "1003" }, { "Off", "1004" }, { "Bank", "1005" } };
การเข้าถึงสมาชิกแต่ละตัวละด้วย foreach
static void Main(string[] args)
{
string[] studentNames = { "You", "Noo", "Poom", "Off", "Bank" };
foreach (string studentName in studentNames)
{
Console.WriteLine(studentName);
}
}
ผลลัพธ์
You
Noo
Poom
Off
Bank
ArrayList อาเรย์เก็บข้อมูลได้จำกัดไม่สามารถเก็บข้อมูลได้มากกว่าขนาดที่กำหนดไว้ในขั้นตอนที่สร้างอาเรย์ C# จึงมีประเภทข้อมูลพิเศษที่มีลักษณะเหมือนอาเรย์แต่สามารถเพิ่มสมาชิกที่เก็บไว้เข้าไปได้เรื่อยๆ มีชื่อว่า ArrayList
ตัวอย่างการใช้ ArrayList
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add("You");
list.Add("Noo");
list.Add("Poom");
list.Add("Off");
list.Add("Bank");
list.Add("Bomb");
list.Add("Nut");
list.Add("Max");
//เพิ่มต่อได้อีก
}