Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การทำงานของ Array (อาร์เรย์) ใน C#


อาร์เรย์ (Array) แทนจำนวนคงที่ขององค์ประกอบชนิดเดียวกัน จัดเก็บในหน่วยความจำติดกัน (Contiguous Memory) ให้การเข้าถึงได้อย่างมีประสิทธิภาพหากรู้ Index

Syntax การประกาศและเริ่มต้น:

// สร้างอาร์เรย์สตริงขนาด 3
string[] languages = new string[3];

กำหนดค่าให้แต่ละ Index:

languages[0] = "csharp";
languages[1] = "visual basic";
languages[2] = "f#";

Syntax แบบสั้น (Collection Initializer):

string[] languages = new string[] { "csharp", "visual basic", "f#" };

ใช้ var (Implicitly Typed):

var languages = new string[] { "csharp", "visual basic", "f#" };

เข้าถึงองค์ประกอบ:

string language = languages[0];
Console.WriteLine(language); // csharp

Property Length บอกจำนวนองค์ประกอบ:

int count = languages.Length; // 3

สำคัญ: ไม่สามารถเปลี่ยนขนาดอาร์เรย์หลังสร้างแล้ว การเข้าถึง Index นอกขอบเขตจะโยน IndexOutOfRangeException

string lang = languages[3]; // throws Exception

วนลูปอาร์เรย์ด้วย for หรือ foreach:

// for loop
for (int i = 0; i < languages.Length; i++)
{
    Console.WriteLine(languages[i]);
}

// foreach loop
foreach (string l in languages)
{
    Console.WriteLine(l);
}

Default Values

ตอนสร้างอาร์เรย์ Compiler เริ่มต้นค่า Default ให้ เช่น int[] ทุกตัวเป็น 0

var numbers = new int[3];
foreach (int n in numbers) Console.WriteLine(n); // 0 0 0

Value Type (Struct): สมาชิกทุกตัวเป็น Default Value

Point[] a = new Point[4];
Console.WriteLine(a[2].X); // 0
struct Point { public int X, Y; }

Reference Type (Class): สร้าง Null Reference ให้ทุกตัว

User[] u = new User[4];
// u[2].Y โยน NullReferenceException
class User { public int X, Y; }

ต้อง Initialize เอง:

User[] users = new User[5];
for (int i = 0; i < users.Length; i++) users[i] = new User();

ตัวอย่างโค้ดครบ

using System;
class Program
{
    static void Main()
    {
        string[] languages = new string[3];
        languages[0] = "csharp";
        languages[1] = "visual basic";
        languages[2] = "f#";

        string[] languages2 = new string[] { "csharp", "visual basic", "f#" };
        var languages3 = new string[] { "csharp", "visual basic", "f#" };

        Console.WriteLine(languages[0]); // csharp
        Console.WriteLine(languages.Length); // 3

        foreach (string l in languages) Console.WriteLine(l);

        var numbers = new int[3];
        foreach (int n in numbers) Console.WriteLine(n); // 0 0 0

        Point[] pts = new Point[4];
        Console.WriteLine(pts[2].X); // 0

        User[] users = new User[5];
        for (int i = 0; i < users.Length; i++) users[i] = new User();
    }
}
struct Point { public int X, Y; }
class User { public int X, Y; }

ผลลัพธ์

csharp
3
csharp
visual basic
f#
csharp
visual basic
f#
0
0
0
0