อาเรย์

20 September 2016

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

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

Array in Visual Basic

ในรูปเป็นการแสดงตัวอย่างวิธีการเก็บข้อมูลของอาเรย์ เราเก็บตัวเลข 5 ตัวลงในอาเรย์ และตัวเลขแต่ละตัวจะมี index ของมัน โดย index ของอาเรย์นั้นจะเริ่มจาก 0 เสมอ

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

อาเรย์ คือตัวแปร ดังนั้นก่อนการใช้งานอาเรย์ เราจำเป็นต้องประกาศตัวแปรอาเรย์มาก่อน โดยการใช้คำสั่ง Dim เช่นเดียวกันกับการประกาศตัวแปรปกติ แต่สำหรับอาเรย์จะต้องมีการกำหนดขนาดด้วย โดยการใช้เครื่องหมาย () เพื่อบ่งบอกว่ามันเป็นตัวแปรอาเรย์

ต่อไปมาดูการประกาศและใช้งานอาเรย์ในภาษา Visual Basic

Module ArrayExample

    Sub Main()

        Dim number(4) As Integer
        number(0) = 10
        number(1) = 20
        number(2) = 30
        number(3) = 40
        number(4) = 50

        For index As Integer = 0 To number.Length - 1
            Console.WriteLine("number({0}) = {1}", index, number(index))
        Next

    End Sub

End Module

ในตัวอย่าง เราได้ประกาศตัวแปรอาเรย์ เพื่อเก็บค่าตัวเลขจำนวน 5 ตัว และใช้คำสั่ง For loop ในการวนซ้ำเพื่อแสดงข้อมูลภายในอาเรย์

Dim number(4) As Integer

คำสั่งนี้เป็นการประกาศตัวแปรอาเรย์ที่ชื่อ numberเราได้กำหนดขนาดโดย (4) นั่นหมายความว่าขนาดที่แท้จริงของมันจะบวกไปอีก 1 เพราะว่า index ของอาเรย์ในภาษา Visual Basic นั้นจะเริ่มต้นที่ 0 ถึง 4 ดังนั้นมันจึงมีขนาดเป็น 5 นั่นเอง

number(0) = 10
number(1) = 20
number(2) = 30
number(3) = 40
number(4) = 50

ต่อมาเป็นการกำหนดค่าให้กับอาเรย์แต่ละตำแหน่งผ่านทาง index ของมัน โดยใส่ตัวเลข index ภายในเครื่องหมาย () เหมือนที่คุณเห็น number(0) เป็นข้อมูลในตำแหน่งแรกของอาเรย์ และ number(4) เป็นข้อมูลตำแหน่งสุดท้ายของอาเรย์

For index As Integer = 0 To number.Length - 1
    Console.WriteLine("number({0}) = {1}", index, number(index))
Next

ต่อมาเราได้ใช้คำสั่ง For loop ในการวนอ่านค่าของอาเรย์ เพราะว่า index ของอาเรย์เป็นลำดับและเริ่มจาก 0 เราใช้คำสั่ง For loop ในการวนตั้งแต่ 0 ถึง 4 คำสั่ง number.Length เป็นการทราบขนาดของอาเรย์ และลบด้วยหนึ่งสำหรับ index ตัวสุดท้าย

number(0) = 10
number(1) = 20
number(2) = 30
number(3) = 40
number(4) = 50

และนี่เป็นผลลัพธ์จากการแสดงข้อมูลภายในอาเรย์

ต่อไปมาดูตัวอย่างเพิ่มเติมเกี่ยวกับอาเรย์ ซึ่งเราประกาศอาเรย์พร้อมกำหนดค่าให้กับมันในตอนเริ่มต้น รวมทั้งใช้ property และเมธอดกับอาเรย์

Module ArrayExample2

    Sub Main()

        Dim name = New String() {"Mateo", "Danny", "Thomas", "Jane"}
        Console.WriteLine(String.Join(", ", name))

        Dim number = New Integer(4) {8, 13, 20, 30, 38}
        Console.WriteLine("Max = {0}", number.Max)
        Console.WriteLine("Min = {0}", number.Min)
        Console.WriteLine("Sum = {0}", number.Sum)

    End Sub

End Module

ในตัวอย่าง เราได้ประกาศอาเรย์ และกำหนดค่าให้กับมันในทันที การประกาศค่าจะใช้คำสั่ง New ตามด้วยประเภทข้อมูลและขนาดของมัน และค่าของอาเรย์จะอยู่ภายในเครื่องหมาย () คั่นด้วยเครื่องหมาย comma ,

Dim name = New String() {"Mateo", "Danny", "Thomas", "Jane"}
Console.WriteLine(String.Join(", ", name))

เราได้ประกาศตัวแปรอาเรย์ name ที่มีขนาดเป็น 4 และกำหนดค่าให้กับมัน ถ้าหากเป็นการกำหนดค่าพร้อมกับการประกาศตัวแปร เราไม่ต้องระบขนาดของอาเรย์ก็ได้ และเราแสดงผลสมาชิกในอาเรย์ โดยใช้เมธอด String.Join() เป็นการนำค่าในอาเรย์มาต่อกันและคั่นด้วยเครื่องหมาย ,

Dim number = New Integer(4) {8, 13, 20, 30, 38}
Console.WriteLine("Max = {0}", number.Max)
Console.WriteLine("Min = {0}", number.Min)
Console.WriteLine("Sum = {0}", number.Sum)

ต่อมาเราประกาศตัวแปรอาเรย์ number ที่มีขนาดเป็น 5 เราใช้ property ต่างๆ เพื่อเข้าถึงค่าในอาเรย์ เช่น ค่ามากสุด ค่าน้อยสุด หรือผลรวมของจำนวนทั้งหมด อย่างไรก็ตามอาเรย์ยังมี property และเมธอดอีกหลายอย่าง เพราะมันเป็นคลาส

Mateo, Danny, Thomas, Jane
Max = 38
Min = 8
Sum = 109

นี่เป็นผลลัพธ์ของโปรแกรมการใช้อาเรย์

อาเรย์ 2 มิติ

อาเรย์ 2 มิติ คืออาเรย์ที่เก็บข้อมูลในรูปแบบตาราง มันเหมือนเป็นการนำอาเรย์ 1 มิติขนาดที่เท่ากันมาต่อกัน มาดูตัวอย่างการใช้อาเรย์ 2 มิติในภาษา Visual Basic

Module TwoDimensionalArray

    Sub Main()

        Dim number = New Integer(, ) {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}

        For i As Integer = 0 To 3
            For j As Integer = 0 To 2
                Console.Write("{0} ", number(i, j))
            Next
            Console.WriteLine()
        Next

    End Sub

End Module

ในตัวอย่าง เราได้ประกาศตัวแปรอาเรย์ 2 มิติที่มีขนาด 4x3 มันหมายถึง 4 แถว และ 3 คอลัมน์ ดังนั้นจำนวนสมาชิกทั้งหมดในอาเรย์จะมี 12 ตัว เราใช้เครื่องหมาย (, ) คั่นระหว่างมิติของอาเรย์ และกำหนดค่าเริ่มต้นแบบเมทริกซ์

For i As Integer = 0 To 3
    For j As Integer = 0 To 2
        ...

เราใช้สั่ง For loop ซ้อนกันในการวนอ่านค่าอาเรย์ loop ด้านนอกใช้ i เป็น index สำหรับแถว และ loop ด้านในใช้ j เป็น index สำหรับคอลัมน์ของอาเรย์ และเราเข้าถึงค่าของอาเรย์สองมิติโดยคู่อันดับของ index ทั้งสองในคำสั่ง number(i, j)

1 2 3
4 5 6
7 8 9
10 11 12

นี่เป็นผลลัพธ์ตัวอย่างการใช้งานอาเรย์ 2 มิติในภาษา Visual Basic

อาเรย์ 3 มิติและอาเรย์หลายมิติ

นอกจากนี้ อาเรย์ยังมี 3 มิติ และมากกว่านี้ได้ แต่โดยทั่วไปแล้วในการเขียนโปรแกรม เรามักจะใช้มากที่สุด 3 มิติ เช่น การใช้พัฒนาเกมส์ 3 มิติ ที่จะต้องเก็บตำแหน่งของวัตุ ทั้งแนวแกน x, y และ z เป็นต้น มาดูตัวอย่างสำหรับอาเรย์ 3 มิติ ต่อไปมาดูตัวอย่าง

Module ThreeDimensionalArray

    Sub Main()

        Dim point = New Integer(2, 2, 2) {
        {{-1, 2, 0}, {1, 1, 5}, {0, -2, 3}},
        {{3, 4, -3}, {1, 0, 1}, {-3, 2, 1}},
        {{3, 4, -3}, {1, 0, 1}, {-3, 2, 1}}}

        For i As Integer = 0 To 2
            For j As Integer = 0 To 2
                For k As Integer = 0 To 2
                    Console.Write("{0} ", point(i, j, k))
                Next
                Console.WriteLine()
            Next
            Console.WriteLine("---------")
        Next

    End Sub

End Module

ในตัวอย่าง เราได้สร้างอาเรย์ 3 มิติที่มีขนาดเป็น 3x3x3 และเราใช้คำสั่ง For loop ซ้อนกัน 3 ครั้งเพื่อที่จะวนอ่านค่าในอาเรย์ ซึ่งใช้ index i j และ k เพื่อที่จะนำมาสร้างเป็นคำสั่งในการเข้าถึงสมาชิกในอาเรย์ point(i, j, k)

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

Dim multiDimArr = New DataTye(, ... ,)
multiDimArr(, ... , )  ' Access array's values

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

อาเรย์ของอาเรย์ (Jagged array) คืออาเรย์ที่เก็บค่าเป็นอาเรย์ด้วยกัน สิ่งที่แตกต่างจากอาเรย์แบบปกติคือมันสามารถเก็บอาเรย์ที่มีขนาดที่แตกต่างกันได้ มาดูตัวอย่างการใช้งาน Jagged array ในภาษา Visual Basic

Module JaggedArray

    Sub Main()

        Dim sales()() As Double = New Double(3)() {}
        Dim rd As Random = New Random()

        For week As Integer = 0 To sales.GetUpperBound(0)
            If week = 0 Then
                sales(week) = New Double(4) {}
            Else
                sales(week) = New Double(6) {}
            End If
        Next

        For week As Integer = 0 To sales.GetUpperBound(0)
            Dim upper = sales(week).GetUpperBound(0)
            For d = 0 To upper
                sales(week)(d) = rd.Next() Mod 90 + 10
            Next
        Next

        For week As Integer = 0 To sales.GetUpperBound(0)
            Dim upper = sales(week).GetUpperBound(0)
            Console.Write("Week {0}: ", (week + 1))
            For d = 0 To upper
                Console.Write(sales(week)(d) & " ")
            Next
            Console.WriteLine()
        Next

    End Sub

End Module

ในตัวอย่าง เราได้ประกาศ Jagged อาเรย์เพื่อเก็บยอดของการขายในแต่ละสัปดาห์เป็นจำนวน 4 สัปดาห์

Dim sales()() As Double = New Double(3)() {}

นี่เป็นการประกาศ Jagged array เราต้องกำหนดขนาดของมันในมิติแรกเสมอ ซึ่งเราได้กำหนดขนาดเป็น 4

For week As Integer = 0 To sales.GetUpperBound(0)
    If week = 0 Then
        sales(week) = New Double(4) {}
    Else
        sales(week) = New Double(6) {}
    End If
Next

นี่เป็นการประกาศอาเรย์ภายใน เราใช้เมธอด sales.GetUpperBound(0) สำหรับรับค่าของขนาดของอาเรย์ซึ่งคือ 4 ที่เราได้ประกาศไว้ เราได้ใช้คำสั่ง If ในการสร้างอาเรย์ที่มีขนาด 5 สำหรับสัปดาห์แรก และ 7 สำหรับสัปดาห์ต่อๆ มา

For week As Integer = 0 To sales.GetUpperBound(0)
    Dim upper = sales(week).GetUpperBound(0)
    For d = 0 To upper
        sales(week)(d) = rd.Next() Mod 90 + 10
    Next
Next

นี่เป็นการกำหนดค่าให้กับอาเรย์จากการสุ่มค่า จากตัวแปร rd ซึ่งเป็นออบเจ็คสำหรับสุ่มตัวเลข เราได้สุ่มค่าตั้งแต่ 10 - 99 ใส่ลงในอาเรย์ภายในของแต่ละแถว คำสั่ง sales(week).GetUpperBound(0) ใช้ในการหาขนาดของอาเรย์ภายใน

Week 1: 49 43 67 79 91
Week 2: 19 60 25 96 86 63 56
Week 3: 43 83 86 47 16 77 89
Week 4: 46 22 63 33 81 67 55

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

อาเรย์เมธอด

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

Module ArrayMethods

    Sub Main()

        Dim names = New String() {"Mateo", "Danny", "Thomas", "Jane"}

        Array.Sort(names)

        For Each el As String In names
            Console.Write(el + " ")
        Next

        Console.WriteLine()

        Array.Reverse(names)

        For Each el As String In names
            Console.Write(el + " ")
        Next

        Console.WriteLine()

        names.SetValue("Sam", 0)

        For i As Integer = 0 To names.Length - 1
            Console.Write(names.GetValue(i) + " ")
        Next

    End Sub

End Module

ในตัวอย่าง เราได้ประกาศอาเรย์ names ซึ่งเก็บค่าที่เป็น String

Array.Sort(names)

เมธอด Array.Sort() เป็นเมธอดในการเรียงข้อมูลจากน้อยไปหามาก มันสามารถใช้ได้กับข้อมูลประเภทต่างๆ ไม่ว่าจะเป็นตัวเลขหรือ String

For Each el As String In names
    Console.Write(el + " ")
Next

หลังจากเรียงข้อมูลในอาเรย์จากน้อยไปมากแล้ว เราได้ใช้คำสั่ง For Each loop ในการวนอ่านค่าในอาเรย์ ซึ่งคำสั่ง For Each loop เป็นคำสั่งที่ออกแบบมาสำหรับใช้งานกับอาเรย์

Array.Reverse(names)

ต่อมาเราใช้เมธอด Array.Reverse() ในการกลับค่าข้อมูลในอาเรย์ โดยสมาชิกตัวแรกจะไปอยู่ท้ายสุด และสมาชิกตัวท้ายสุดจะมาอยู่ตัวแรกตามลำดับ ถ้าเราใช้เมธอดนี้หลังจากเมธอด Array.Sort() เราจะได้อาเรย์ที่เรียงจากมากไปน้อย

names.SetValue("Sam", 0)

นี่เป็นคำสั่งในการกำหนดค่าให้กับสมาชิกในอาเรย์ โดยใช้เมธอด SetValue() อากิวเมนต์ตัวแรกเป็นข้อมูลและตัวที่สองเป็น index ของอาเรย์ มันมีความหมายเช่นเดียวกันกับคำสั่ง names(0) = "Sam"

Console.Write(names.GetValue(i) + " ")

นี่เป็นการอ่านค่าจากอาเรย์มาแสดงผลโดยการใช้เมธอด GetValue() มันมีความหมายเช่นเดียวกันกับคำสั่ง names(i)

Danny Jane Mateo Thomas
Thomas Mateo Jane Danny
Sam Mateo Jane Danny

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

อย่างไรก็ตาม ยังมีเมธอดต่างๆ อีกสำหรับการจัดการอาเรย์ ซึ่งเป็นเมธอดพื้นฐานในการจัดการข้อมูลแบบอาเรย์โดยที่เราไม่ต้องเขียนขึ้นใหม่ และในบทนี้ คุณได้เรียนรู้เกี่ยวกับอาเรย์ในภาษา Visual Basic

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