อาเรย์

17 February 2016

อาเรย์ใน C#

อาเรย์เป็นประเภทข้อมูลชนิดหนึ่ง ที่คุณสามารถเก็บค่าตัวแปรประเภทเดียวกันได้หลายๆ ค่าไว้ในตัวแปรเดียวที่เรียกว่า ตัวแปรอาเรย์ ในการสร้างอาเรย์ในภาษา C# มีรูปแบบดังนี้:

type[] arrayName;

โดย type สามารถเป็นได้ทั้งตัวแปรพื้นฐานในภาษา C# และตัวแปรประเภทอ็อบเจ็ค และ arrayName เป็นชื่อของอาเรย์ index ของอาเรย์นั้นจะเริ่มจาก 0 ดังนั้น index ของอาเรย์จะมีตั้งแต่ 0 ถึง n - 1 เมือ n เป็นจำนวนขนาดของค่าในอาเรย์ มีอาเรย์ 3 ประเภทในภาษา C# นั่นคือ อาเรย์หนึ่งมิติ (Single-Dimensional array) อาเรย์หลายมิติ (Multidimensional array) และ อาเรย์ของอาเรย์ (Array of Array)

อาเรย์ 1 มิติ

อาเรย์หนึ่งมิติ เป็นรูปแบบพื้นฐานของอาเรย์ที่จะเก็บค่าของข้อมูลที่มีประเภทเดียวกันเป็นซึ่งแบบลำดับไว้ในตัวแปรอาเรย์ และเราสามารถเข้าถึงข้อมูลเหล่านี้ได้ผ่าน index ของมัน

int[] array1 = new int[5];
int[] array2 = new int[] { 1, 3, 5, 7, 9};

ในตัวอย่างเราได้ประกาศตัวแปรอาเรย์สองตัว เราประกาศตัวแปรที่มีชื่อว่าarray1 โดยมีประเภทข้อมูลเป็น int นั่นหมายความว่าตัวแปรนี้จะใช้กับข้อมูลเป็นตัวเลขจำนวนเต็ม ซึ่งมีขนาดเป็น 5 แต่เรายังไม่ได้กำหนดค่าใดๆ ให้กับอาเรย์ ดังนั้นมันจะเป็นค่าว่างเปล่าหรือ null สำหรับอาเรย์อันที่สองมีชื่อว่า array2 เราได้กำหนดค่าให้กับมันด้วย

// updating array values
int[] array1 = new int[5];
array1[0] = 2;
array1[1] = 43;
array1[2] = 54;

// reading array value
float[] array2 = new float[] {1,2f, 3.4f, 5.0f, 8.8f, 10.5f};
Console.WriteLine(array2[0]); // 1.2
Console.WriteLine(array2[4]); // 10.5

คุณสามารถเข้าถึงตำแหน่งของอาเรย์เพื่ออ่านหรืออัพเดทค่า โดยอาเรย์นั้นจะมี Index เริ่มที่ 0 เสมอ ในตัวอย่างในการเข้าถึงค่าแรกของอาเรย์ array2 เราต้องใช้คำสั่ง array2[0] และค่าสุดท้ายคือ array2[4] เพราะว่าอาเรย์ array2 นั้นมีขนาดเป็น 5

การใช้คำสั่ง For loop กับอาเรย์

เพราะว่าอาเรย์นั้นเก็บข้อมูลเป็นแบบลำดับและสามารถเข้าถึงข้อมูลได้โดยผ่าน index ของมัน การใช้ for loop กับอาเรย์นั้นจึงเป็นสิ่งที่สะดวกมากกว่า หรือเมื่อเรามีตัวแปรอาเรย์ที่มีขนาดใหญ่

using System;

class SingleArrayRead
{
    static void Main(string[] args)
    {
        int[] array1 = new int[10];
        for (int i = 0; i < 10; i++)
            array1[i] = (i + 1) * 5;

        for (int i = 0; i < 10; i++)
            Console.Write(array1[i] + ", ");
    }
}

ในตัวอย่าง เราได้ใช้คำสั่ง for loop ในการกำหนดค่าให้กับอาเรย์ โดยใช้ index ของอาเรย์ผ่านตัวแปร i หลังจากกำหนดค่าให้เสร็จแล้ว เราก็ได้สร้างอีก loop หนึ่งเพื่ออ่านจากมาแสดงผลที่หน้าจอ

5, 10, 15, 20, 25, 30, 35, 40, 45, 50,

และนี่เป็นผลลัพธ์ของโปรแกรมในอาเรย์หนึ่งมิติ

อาเรย์หลายมิติ

อาเรย์หลายมิตินั้นจะสามารถเก็บข้อมูลได้หลายมิติมากขึ้น อาเรย์สองมิตินั้นเหมือนตาราง ซึ่งจะไปกอบไปด้วยแถวและหลัก อาเรย์ 3 มิตินั้นจะเหมือนลูกบาศก์ และอาเรย์สามารถมีได้ทั้ง 4 มิติ 5 มิติ และไปเรื่อยๆ แต่โดยปกติในการเขียนโปรแกรมแล้ว ส่วนมากที่สุดที่เราจะใช้คือถึงแค่ 3 มิติเท่านั้น

อาเรย์ 2 มิติ

การสร้างอาเรย์สองมิตินั้นคล้ายกับอาเรย์หนึ่งมิติ แต่มันแค่ต้องการเครื่องหมาย , คั่นระหว่างมิติสำหรับการสร้าง โดยมีรูปแบบดังนี้:

int[,] array1 = new int[2, 3];
int[,] array2 = new int[,] { {1, 2, 3}, {4, 5, 6}};

ในตัวอย่างเราได้ประกาศอาเรย์สองมิติ โดยใช้เครื่องหมายคอมม่า , เป็นตัวคั่นระหว่างมิติ โดยมันจะเก็บข้อมูลในแบบแถวและหลัก พูดง่ายๆ ก็คือแบบต่างรางนั่นเอง คุณสามารถเข้าถึงค่าของอาเรย์สองมิติได้โดยคู่ของ index แบบนี้ [row, column] มาดูตัวอย่าง

int[,] array2 = new int[,] { {1, 2, 3}, {4, 5, 6} };
Console.WriteLine(array2[0, 0]);  // read 1
Console.WriteLine(array2[0, 1]);  // read 2
Console.WriteLine(array2[0, 2]);  // read 3
Console.WriteLine(array2[1, 0]);  // read 4
Console.WriteLine(array2[1, 1]);  // read 5
Console.WriteLine(array2[1, 2]);  // read 6
Console.WriteLine(array2[2, 2]); // you can't do this

ในตัวอย่าง เราได้เข้าถึงค่าของอาเรย์ array2 สำหรับคำสั่งสุดท้าย array2[2, 2] นั้นจะเกิดข้อผิดพลาดเพราะว่า Index ของอาเรย์นั้นเกินขอบเขต เช่นเดียวกันกับอาเรย์หนึ่งมิติ index ของมันก็เริ่มจาก 0 เนื่องจากขนาดอาเรย์ของเรานั้นเป็น 2x3 ดังนั้นค่าแรกในอาเรย์จะเป็น index [0, 0] และค่าสุดท้ายคือ [1, 2]

การใช้ For loop กับอาเรย์สองมิติ

อีกครั้ง เราสามารถใช้คำสั่ง for loop กับอาเรย์สองมิติหรืออาเรย์หลายมิติ แต่มันจะเป็น loop ที่ซ้อนกัน มาดูตัวอย่าง

using System;

class TwoArrayRead
{
    static void Main(string[] args)
    {
        int[,] myArray = new int[,] { {10, 43, -23, 5 }, {-5, 9, 15, 3 }, {0, 41, -30, -7} };

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                Console.Write("[{0},{1}] = {2}\t", i, j, myArray[i, j]);
            }
            Console.WriteLine();
        }
    }
}

ในตัวอย่างเราได้ใช้ for loop เพื่ออ่านค่าจากอาเรย์สองมิติ ในการอ่านค่าจากอาเรย์สองมิติ เราจำเป็นต้องใช้สอง loop และเป็น loop ที่ซ้อนกัน (nested loops) โดย loop ด้านนอกจะใช้เป็น index ของแถว และข้างในจะใช้เป็น Index ของคอลัมน์ เช่น myArray[0, 2] นั้นจะเป็นแถวที่ 1 คอลัมน์ที่ 3

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

int threeArray[, , ,] = new int [3, 4, 5];
int fourArray[, , , ,] = new int [3, 4, 5, 6];
...

ในตัวอย่างเป็นการสร้างอาเรย์มิติที่มากกว่า 2 ในภาษา C# โดยคั่นด้วยเครื่องหมายคอมม่าสำหรับจำนวนมิติ ในการเข้าถึงค่าก็จะเป็น threeArray[i, j, k, ...]

อาเรย์ของอาเรย์ (Jagged)

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

int[][] jaggedArray = new int[6][];

อาเรย์ของอาเรย์นั้นแตกต่างจากอเรย์หลายมิติในภาษา C# แต่มันเหมือนกับอาเรย์หลายมิติในภาษา C และ C++ ในการอ่านค่าและเข้าถึงค่าก็เช่นเดียวกัน

using System;

class JaggedArray
{
    static void Main(string[] args)
    {
        int[][] jaggedArray = new int[4][];

        for (int i = 0; i < jaggedArray.Length; i ++) {
            jaggedArray[i] = new int[] { (i * 3) + 1, (i * 3) + 2, (i * 3) + 3 };
        }

        for (int i = 0; i < jaggedArray.Length; i++) {
            for (int j = 0; j < jaggedArray[i].Length; j++) {
                Console.WriteLine("array[{0}][{1}] = {2}", i, j, jaggedArray[i][j]);
            }
        }
    }
}

ในตัวอย่าง เราได้สร้างอาเรย์ของอาเรย์ โดยมีขนาดคือ 4x3 นั่นหมายความว่าอาเรย์จะประกอบไปด้วย 4 แถวและ 3 คอลัมน์ เราได้ใช้คำสั่ง for loop ในการกำหนดค่าให้กับอาเรย์ในแต่ละแถว โดยค่า Length นั้นเป็นการอ่านขนาดของอาเรย์ เรายังอ่านค่าจากอาเรย์และแสดงผลทางหน้าจอโดยใช้ nested loop

เหมือนกับตัวแปร เราสามารถกำหนดค่าให้กับตัวแปรอาเรย์ได้ทันทีเมื่อมันถูกสร้างเหมือนตัวอย่างข้างล่างนี้

using System;

class JaggedArray2
{
    static void Main(string[] args)
    {
        int[][] jaggedArray = new int[][] {  
            new int[] { 1, 2, 3}, 
            new int[] { 4, 5, 6 }, 
            new int[] { 7, 8, 9 }, 
            new int[] { 10, 11, 12 }
        };

        /*
        another method
        jaggedArray[0] = new int[] { 1, 2, 3};
        jaggedArray[1] = new int[] { 4, 5, 6};
        jaggedArray[2] = new int[] { 7, 8, 9};
        jaggedArray[3] = new int[] { 10, 11, 12};
        */

        for (int i = 0; i < jaggedArray.Length; i++) {
            for (int j = 0; j < jaggedArray[i].Length; j++) {
                Console.WriteLine("array[{0}][{1}] = {2}", i, j, jaggedArray[i][j]);
            }
        }
    }
}

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

array[0][0] = 1
array[0][1] = 2
array[0][2] = 3
array[1][0] = 4
array[1][1] = 5
array[1][2] = 6
array[2][0] = 7
array[2][1] = 8
array[2][2] = 9
array[3][0] = 10
array[3][1] = 11
array[3][2] = 12

และนี่เป็นลัพธ์เมื่อรันโปรแกรม

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับอาเรย์ในภาษา C# ในแบบต่างๆ ทั้งอาเรย์หนึ่งมิติ อาเรย์หลายมิติ และอาเรย์ของอาเรย์

บทความนี้เป็นประโยชน์หรือไม่? Yes · No