Tìm kiếm

6. Mảng (Array) trong C#

Với những bạn đã được làm quen với các ngôn ngữ khác thì việc nhắc đến mảng không có gì là mới lạ nhưng trong tài liệu này điều mà mình muốn hướng là cả những bạn chưa từng làm quen với ngôn ngữ lập trình nào cả và các bạn khác nên tìm hiểu để rút ra nhận sét và so sánh sự giống và khác nhau của mảng trong từng ngôn ngữ. Mảng trong C# là một vấn đề rất quan trọng và nó sẽ là bước đệm phục vụ tốt hơn cho chúng ta khi bước tiếp vào phần sau.


I. Mảng là gì?
Một ngày nào đó bạn gặp một chương trình mà cần lưu trữ hàng loạt các biến có cùng kiểu dữ liệu và cách làm bây giờ là khai báo từng biến một. Thật dài dòng và rắc rối đúng hem. Và thật tuyệt vời khi C# cung cấp cho chúng ta một kiểu cấu trúc dữ liệu cho phép quản lý các biến cùng tên đó đó là mảng(arrays).
Vậy mảng là gì? Có lẽ nhìn vào ví dụ trên các bạn cũng đã định nghĩa được cho mình về khái niệm này.
Mảng là một tập hợp hữu hạn các phần tử có cùng kiểu dữ liệu.
II. Cách khai báo:
Để khai báo một mảng trong C# chúng ta sử dụng cú pháp như sau:




< DataType >[]< ArrayName >;


Trong đó:
DataType: kiểu dữ liệu như int, float….
ArrayName: tên mảng (hãy đặt tên nào đó có ý nghĩa và mang tính chất gợi mở nhé).
[]: cặp dấu ngoặc vuông này chỉ ra cho trình biên dịch biết chúng ta đang khai báo một mảng.
Vd:


int[]x;


Bây giờ là vấn đề khởi tạo mảng tức là quá trình khai báo số lượng các phần tử của mảng và gán giá trị cho các phần tử đó.
Tớ sẽ tóm tắt cho mọi người 4 cách như sau để khởi tạo giá trị của mảng:
C1: Khai báo và chỉ ra số phần tử của mảng.


Cú pháp:


[DataType] [ ] [ArrayName] = new [DataType] [number of elements];


number of elements: số phần tử của mảng.
VD: khai báo một mảng số nguyên lưu trữ 5 phần tử.


int[] a = new int[5]


C2: Khai báo sau đó mới khởi tạo số phần tử của mảng.


[DataType] [ ] [ArrayName];
[ArrayName] = new [DataType] [number of elements];


VD: khai báo một mảng số nguyên lưu trữ 5 phần tử.


Int[] a;
a = new int[5];


C3: Khai báo, chỉ ra số lượng các phần tử mảng và gán các giá trị ban đầu cho các phần tử mảng.


int[] a = new int[5] {1, -1, 3, 4, 5};


gán giá trị cho các phần tử của mảng.


- Truy cập các phần tử mảng: một mảng là một danh sách các phần tử có cùng kiểu dữ liệu, các phần tử đó được đánh số thứ tự bắt đầu từ 0 đến n-1 (Trong đó n là số phần tử của mảng).
Như vậy để truy cập đến 1 phần tử của mảng thì chúng ta sử dụng một số nguyên để chỉ ra số thứ tự của phần tử đó trong mảng, phần tử nguyên này được gọi là chỉ số (index).
Cú pháp tổng quát để truy cập đến phần tử thứ i của mảng là:


[tên mảng] [i-1];


VD: gán giá trị 5 cho phần tử thứ 3 của mảng.


a[2] = 5;


- Duyệt qua các phần tử mảng.
Kể từ khi mảng là một tập hợp các hữu hạn phần tử do đó để duyệt qua các phần tử mảng thường chúng ta sử dụng vòng lặp for.
VD: in danh sách các phần tử mảng a ở trên.


Console.WriteLine("Danh sach cac phan tu trong mang:");
for (int i = 0; i < 5; i++)
Console.Write(a[i] + "\t");


III. Các kiểu mảng:
Mảng trong C# được chia thành 3 loại:


Mảng 1 chiều (single-dimension array): mảng 1 chiều là một mảng các phần tử. Mảng 1 chiều được khai báo chỉ bao gồm 1 cặp dấu [ ].
Tất cả những ví dụ trên tớ đều minh họa mạng 1 chiều nên tớ sẽ không lấy thêm ví dụ ở đây nữa.
- Mảng nhiều chiều (multi-dimension array): mảng nhiều chiều là mảng có số chiều từ 2 trở lên (có từ 2 cặp [ ] trở lên).
Vd: chúng ta có 1 đối tượng học sinh vừa tổng kết điểm từng môn xong và bạn ấy có 2 môn mỗi môn lại có 3 điểm. Vậy chúng ta sẽ cùng hiểu hơn để đến với ví dụ này nhé.




Visual C# Code:


using System;
using System.Collections.Generic;
using System.Text;


namespace ConsoleApplication22
{
class Program
{
static void Main(string[] args)
{
// Khai báo một mảng 2 chiều 2 dòng và 3 cột để lưu
// trữ danh sách bảng điểm của 1 sinh viên.
float[,] diem = new float[2, 3];


// Nhập danh sách điểm cho sinh viên.
Console.WriteLine("Nhap diem cho sinh vien");
for (int i = 0; i < 2; i++)
{
Console.WriteLine("Nhap diem cho mon thu {0}", i + 1);
for (int j = 0; j < 3; j++)
{
Console.Write("Nhap diem thu {0}: ", j + 1);
diem[i, j] = float.Parse(Console.ReadLine());
}
}
// In danh sách điểm cho sinh viên
Console.WriteLine("\n\tDiem1\tDiem2\tDiem3\n");
for (int i = 0; i < 2; i++)
{
Console.Write("Mon{0}\t", i + 1);
for (int j = 0; j < 3; j++)
Console.Write(diem[i, j] + "\t");
Console.WriteLine();
}
Console.ReadLine();
}
}
}




Và loại cuối cùng mà tớ thấy có một vài bài trên diễn đàn đã thắc mắc về nó.
Mảng nhọn (jagged array): mảng nhọn là một mảng của các mảng, trong đó kích thước của mỗi một mảng có thể khác nhau.
Vd: chúng ta có 1 đối tượng học sinh vừa thi xong học kỳ 2 môn và mỗi môn lại có số điểm thành phần khác nhau, môn thứ nhất thi 2 lần và có 2 lần điểm, môn thứ hai lại thi tới 5 lần và có 5 lần điểm. Vậy nếu chúng ta sử dụng mảng nhiều chiều thì môn thứ nhất lại không sử dụng hết bộ nhớ đã khai báo. Vậy làm thế nào để tiết kiệm bộ nhớ thì mảng jagged là một lựa chọn hoàn hảo.




Visual C# Code:


using System;
using System.Collections.Generic;
using System.Text;


namespace ConsoleApplication22
{
class Program
{
static void Main(string[] args)
{
float[][] diem = new float[2][];
diem[0] = new float[] {9, 4};
diem[1] = new float[] { 3, 4, 6, 8, 7 };


// Duyệt qua các phần tử của mảng jagged.
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < diem[i].Length; j++)
Console.Write(diem[i][j] + "\t");
Console.WriteLine();
}


Console.ReadLine();


}
}
}




Chú ý: Mảng trong ngôn ngữ C# có một vài sự khác biệt so với mảng trong ngôn ngữ C++ và
một số ngôn ngữ khác, bởi vì chúng là những đối tượng. Điều này sẽ cung cấp cho mảng sử
dụng các phương thức và những thuộc tính.
Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo những đối tượng Array. Tuy
nhiên, cái thật sự được tạo ra là đối tượng của kiểu System.Array. Mảng trong ngôn ngữ C#
kết hợp cú pháp khai báo mảng theo kiểu ngôn ngữ C và kết hợp với định nghĩa lớp do đó thể
hiện của mảng có thể truy cập những phương thức và thuộc tính của System.Array.

Read Users' Comments (0)

0 Response to "6. Mảng (Array) trong C#"

Đăng nhận xét

Support

Liên hệ DMTuan-Uneti
Mọi thông tin góp ý các bạn liên hệ với mình ! Mail:
  1. manhtuan.leo@gmail.com
  2. manhtuan.itvp@gmail.com

Y!M: manhtuan.it92