Để hiểu rõ hơn về mảng (array) trong C#, bạn hãy theo dõi bài viết này của Mytour.
Tìm hiểu chi tiết về Mảng (array) trong C#
1. Tổng quan về Mảng (array) trong C#.
2. Những điều quan trọng cần biết về mảng (array) trong C#.
3. Cách khai báo mảng.
4. Phương thức khởi tạo mảng.
5. Cách bắt đầu với một mảng sau khi đã khai báo.
6. Đọc và ghi dữ liệu từ các phần tử của mảng.
7. Mảng một chiều và ứng dụng thực tế.
8. Khám phá Mảng đa chiều.
9. Mảng Jagged trong C#: Mảng của mảng.
10. Một số điểm lưu ý quan trọng.
1. Mảng (array) trong C#
Mảng là một tập hợp các biến cùng loại được gọi chung một tên, mỗi biến trong đó được gọi là một phần tử. Các phần tử này có thể là bất kỳ loại dữ liệu nào như char, int, float, ... và được lưu trữ liền kề.
Độ dài của mảng xác định số lượng phần tử. Trong C#, việc phân bổ bộ nhớ cho mảng là linh hoạt. Mảng được coi là đối tượng, vì vậy có thể dễ dàng lấy kích thước bằng cách sử dụng các hàm có sẵn.
Các biến trong mảng được sắp xếp theo thứ tự và mỗi biến có một chỉ số bắt đầu từ 0. Mảng trong C# hoạt động khác với các biến trong C / C++.
2. Điều quan trọng về Mảng (array) trong C#
- Trong C#, tất cả các mảng được phân bổ động.
- Vì các mảng là các đối tượng trong C#, chúng ta có thể xác định độ dài của mảng bằng cách sử dụng thuộc tính Length. Điều này khác với C / C++, nơi chúng ta sử dụng sizeof để lấy độ dài.
- Một biến mảng C# cũng có thể được khai báo như các biến khác với [] sau kiểu dữ liệu.
- Các biến trong mảng được sắp xếp theo thứ tự và mỗi biến có chỉ số bắt đầu từ 0.
- Mảng trong C# là một đối tượng thuộc kiểu System.Array.
- Giá trị mặc định của mảng số và các thành phần kiểu tham chiếu là 0 và null tương ứng.
- Các phần tử mảng jagged là kiểu tham chiếu và được khởi tạo thành null.
- Các phần tử mảng có thể thuộc bất kỳ loại giá trị nào, bao gồm cả kiểu giá trị mảng.
- Các kiểu mảng là các kiểu tham chiếu được tạo từ kiểu dữ liệu trừu tượng. Các kiểu triển khai Ienumerable sử dụng phép lặp foreach trên tất cả các mảng trong C#.
Mảng có thể chứa cả kiểu dữ liệu nguyên thủy và đối tượng của lớp, phụ thuộc vào định nghĩa của mảng.
Khi sử dụng kiểu dữ liệu nguyên thủy, giá trị thực phải được lưu trữ liên tiếp trong bộ nhớ. Trong trường hợp đối tượng thuộc một lớp, chúng được lưu trữ trong vùng nhớ heap.
Ở đây là hình ảnh minh họa cách mảng lưu trữ các giá trị tuần tự:
Giải thích:
Trong ví dụ trên, chúng ta bắt đầu từ chỉ số 0 để lưu trữ giá trị. Một số giá trị có thể được lưu trữ trong mảng, với chỉ số mảng tăng lên mỗi khi đạt được kích thước mảng.
3. Định nghĩa mảng
Cú pháp định nghĩa mảng như sau:
Trong đó:
< kiểu='' dữ='' liệu=''> : Xác định kiểu phần tử của mảng.
[ ]: Xác định kích thước của mảng.
< tên_mảng=''>: Là tên của mảng.
Ví dụ: Dưới đây là minh họa về định nghĩa mảng trong C#:
int[] x; // lưu trữ giá trị kiểu int
string[] s; // lưu trữ giá trị kiểu string
double[] d; // lưu trữ giá trị kiểu double
Student[] stud1; // lưu trữ các thể hiện của lớp Student, một lớp do người dùng định nghĩa
Chú ý: Việc chỉ khai báo mảng không cấp phát bộ nhớ cho mảng. Mảng phải được khởi tạo trước khi sử dụng.
4. Bắt đầu mảng
Như đã đề cập trước đó, mảng là một kiểu tham chiếu, do đó từ khóa new được sử dụng để tạo một phiên bản của mảng. Chúng ta cũng có thể gán giá trị khởi tạo cho từng phần tử của mảng bằng cách sử dụng chỉ số.
Cú pháp: kiểu [ ] < tên_mảng=''> = new < kiểu_dữ_liệu=''> [kích_thước];
Trong đó:
Kiểu xác định loại dữ liệu được phân bổ, Kích_thước chỉ định số lượng phần tử trong mảng, và Tên_Mảng là tên của biến mảng. Từ khóa new sẽ cấp phát bộ nhớ cho mảng theo kích thước chỉ định.
Dưới đây là một số ví dụ minh họa về cách khai báo và khởi tạo mảng:
Ví dụ 1:
Lệnh trên giới thiệu và khởi tạo một mảng int, có khả năng chứa 5 giá trị int. Kích thước mảng được xác định trong dấu ngoặc vuông ([]).
Ví dụ 2:
Lệnh trên có tác dụng tương tự, nhưng khác biệt ở chỗ nó gán các giá trị cho mỗi chỉ mục trong dấu ngoặc nhọn ({}).
Ví dụ 3:
Trong ví dụ trên, giá trị của mảng được khởi tạo trực tiếp mà không xác định kích thước trước. Do đó, kích thước mảng sẽ chính là số lượng giá trị được khai báo.
5. Khởi tạo một mảng sau khi khai báo
Mảng có thể khởi tạo sau khi khai báo. Việc khởi tạo không nhất thiết phải diễn ra ngay sau khai báo, mà có thể sử dụng từ khóa new. Tuy nhiên, khi khởi tạo mảng sau khi khai báo, cần sử dụng từ khóa new. Mảng cũng có thể được khởi tạo thông qua việc gán trực tiếp giá trị cho các phần tử.
Ví dụ về khởi tạo một mảng sau khi khai báo trong C#:
Lưu ý:
Trong C#, nếu khởi tạo không cung cấp kích thước hợp lệ, sẽ xảy ra lỗi compile time.
Ví dụ về khai báo mảng sai sau khi khởi tạo:
6. Truy cập các phần tử mảng
Tại thời điểm bắt đầu, có thể gán giá trị ngay hoặc gán giá trị bằng cách sử dụng chỉ mục ngẫu nhiên sau khi đã khai báo và khởi tạo. Chúng ta cũng có thể truy cập giá trị của mảng thông qua chỉ mục, đặt chỉ mục của phần tử trong dấu ngoặc vuông với tên mảng.
Ví dụ:
Dưới đây là ví dụ về cách truy cập các phần tử mảng trong C#:
Triển khai: Truy cập các phần tử mảng sử dụng các vòng lặp khác nhau
Kết quả xuất hiện như sau:
7. Mảng một chiều
Trong loại mảng này, chỉ có một hàng để lưu trữ giá trị, tất cả các giá trị được lưu trữ liên tục từ 0 đến kích thước của mảng.
Dưới đây là ví dụ về cách khai báo mảng một chiều chứa 5 số nguyên:
Khai báo mảng nguyên 'arrayint' có 5 phần tử:
Mảng này lưu trữ các giá trị từ [0] đến [4]. Trong đoạn mã trên, toán tử 'new' tạo và khởi tạo mảng với giá trị mặc định. Trong ví dụ này, tất cả các phần tử được khởi tạo là 0, vì đây là kiểu int.
Ví dụ về khai báo mảng một chiều:
Kết quả xuất hiện như sau:
8. Mảng đa chiều trong C#
Mảng đa chiều chứa nhiều hơn một hàng để lưu trữ các giá trị và được gọi là mảng hình chữ nhật trong C#, vì chiều dài của mỗi hàng là giống nhau. Nó có thể là mảng 2D hoặc mảng 3D, ... . Để lưu trữ và truy cập các giá trị của mảng, yêu cầu các vòng lặp lồng nhau. Khai báo, khởi tạo và truy cập mảng đa chiều có dạng như sau:
Ví dụ minh họa:
Dưới đây là ví dụ về mảng đa chiều trong C#:
Kết quả hiển thị như sau:
9. Mảng Jagged trong C#
Mảng có các phần tử là các mảng được gọi là mảng Jagged, hay mảng của mảng. Kích thước các phần tử của mảng Jagged có thể khác nhau. Dưới đây là ví dụ về cách khai báo, khởi tạo và truy cập mảng Jagged trong C#:
Kết quả hiển thị như sau:
Ngoài ra, có thể kết hợp các mảng jagged với mảng đa chiều. Mảng jagged là mảng của mảng, vì vậy các phần tử của mảng là các kiểu tham chiếu và được khởi tạo thành null.
Ví dụ: Dưới đây là ví dụ về khai báo và khởi tạo mảng jagged một chiều chứa 3 phần tử mảng 2 chiều có kích thước khác nhau.
Kết quả hiển thị như sau:
10. Một số lưu ý
- GetLength(int): trả về số lượng các phần tử trong chiều thứ nhất của mảng.
- Khi sử dụng các mảng jagged, nếu chỉ mục không tồn tại, nó sẽ ném ngoại lệ IndexOutOfRange.
Trong bài viết này, Mytour đã giới thiệu chi tiết về mảng (array) trong C#. Bạn cũng có thể khám phá thêm về hằng trong C# và cách sử dụng nó trong các bài viết khác trên Mytour.