เรียนรู้อาเรย์ (array) ในภาษา C#

Tags: c#

ในการเขียนโปรแกรม โดยปกติแล้ว เราจะสร้างตัวแปรขึ้นมาเพื่อเก็บข้อมูล ตัวอย่างเช่น สร้างตัวแปรที่ชื่อว่า 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");
        //เพิ่มต่อได้อีก
    }