Làm việc với mảng

Làm việc với mảng (Array)

Mảng

C# cung cấp 1 cấu trúc dữ liệu, gọi là mảng, để lưu trữ 1 danh sách chứa 1 số lượng cố định các phần tử có cùng kiểu dữ liệu theo thứ tự tuần tự. Hiểu theo cách đơn giản, mảng là 1 tập hợp các phần tử cùng kiểu và có số lượng các phần tử cố định.

Ví dụ, bạn muốn xử lý 100 biến số thì thay bằng bạn phải khai báo 100 biến có tên number0, number1, …, đến number99 thì bạn chỉ cần khai báo 1 biến tên là mảng tên là number và có thể chứa tham chiếu tới 100 biến số tương ứng là numbers[0], numbers[1], và …, numbers[99].

Khai báo biến mảng

Để sử dụng mảng trong chương trình, bạn phải khai báo biến tham chiếu tới mảng và chỉ ra kiểu của mảng. Sau đây là cú pháp khai báo biến mảng:

datatype[] arrayName;
	

trong đó,

  • datatype được sử dụng để chỉ ra kiểu của các phần tử trong mảng
  • [ ] chỉ ra kích cỡ của mảng (số phần tử trong mảng)
  • arrayName chỉ ra tên của mảng

Ví dụ sau về khai báo mảng trong C#:

double[] myList;

Tạo mảng

Bạn có thể tạo 1 mảng bằng cách sử dụng toán tử new với cú pháp sau:

dataType[] arrayRefVar = new dataType[arraySize];

Câu lệnh trên có 2 phần:

  • Nó tạo 1 mảng mới thông qua new dataType[arraySize]
  • Nó gán gán tham chiếu mảng mới vừa tạo thông qua tên biến arrayRefVar

Cách khác để tạo mảng như sau:

dataType[] arrayRefVar = {value0, value1, ..., valuek};

Cách này cho phép bạn tạo 1 mảng dựa trên 1 danh sách các phần tử được tạo sẵn. Các phần tử này được đánh dấu theo thứ tự index, index bắt đầu từ 0.

Sau đây là 1 ví dụ cụ thể về tạo mảng:

double[] myList = new double[10];

Theo ví dụ trên, bạn sẽ tạo ra 1 mảng tên là myList nắm giữ 10 số double tương ứng các chỉ số từ 0 đến 9. Cụ thể, bạn tham khảo minh hoạ bên dưới:

Gán giá trị cho một mảng

Bạn có thể gán giá trị cho từng phần tử trong mảng thông qua chỉ số của mảng như sau:

double[] balance = new double[10];
balance[0] = 4500.0;

Hoặc bạn cũng có thể khởi tạo luôn từ ban đầu tất cả giá trị cho cho các phần tử trong mảng như sau:

double[] balance = {2340.0, 4523.69, 3421.0};

Hoặc thông qua toán tử new như sau:

int[] marks = new int[5] {99,  98, 92, 97, 95};

Hoặc không cần tường minh số phần tử cần khởi tạo:

int[] marks = new int[] {99,  98, 92, 97, 95};

Bạn cũng có thể copy một biến mảng vào một biến mảng khác. Trong trường hợp này, hai biến mảng này sẽ cùng trỏ tới chung một vùng nhớ:

int[] marks = new int[]  {99,  98, 92, 97, 95}; 
int[] score = marks;

Khi bạn tạo 1 mảng trong, trình biên dịch C# sẽ tạo ra từng phần tử mảng với giá trị mặc định tuỳ thuộc vào loại của mảng. Trong trường hợp trên là mảng int nên các phần tử sẽ có giá trị khởi tạo mặc định là 0.

Truy xuất vào các phần tử trong mảng

Một phần tử trong mảng được truy xuất thông qua việc đánh chỉ số mảng. Điều này được làm bởi việc đặt các chỉ số trong cặp ngoặc vuông [] sau tên mảng. Ví dụ:

double salary = balance[9];

Tiếp theo ta sẽ tiến hành các thao tác gán giá trị cho các phần tử trong mảng và truy xuất tới các giá trị đó thông qua ví dụ ArrayDemo dưới đây:

Sử dụng vòng lặp foreach

Trong ví dụ trước bạn có thể duyệt các phần tử trong mảng thông qua việc sử dụng chỉ số các phần tử trong mảng. Tuy nhiên nếu như vậy bạn phải nắm số lượng phần tử trong mảng. Nếu như bạn chỉ quan tâm duyệt từ đầu đến cuối và lấy ra tất các phần tử trong mảng thì bạn có thể dùng câu lệnh foreach đơn giản như trong ví dụ ForeachDemo sau:

Lớp Array

Lớp Array là lớp cơ sở cho tất cả các mảng trong C #. Nó được định nghĩa trong không gian tên System. Lớp Array cung cấp các thuộc tính và phương pháp khác nhau để làm việc với các mảng.

Thuộc tính của lớp Array

STT THUỘC TÍNH
1 IsFixedSize

Lấy một giá trị chỉ rằng có hay không Array đó có một kích cỡ cố định

2 IsReadOnly

Lấy một giá trị chỉ rằng có hay không Array đó là read-only

3 Length

Lấy một số integer (32 bit) mà biểu diễn tổng số phần tử trong tất cả các chiều của Array

4 LongLength

Lấy một số integer (64 bit) mà biểu diễn tổng số phần tử trong tất cả các chiều của Array

5 Rank

Lấy số chiều của Array

Phương thức của lớp Array

Bảng dưới liệt kê một số phương thức được sử dụng phổ biến nhất của lớp Array trong C#:

STT PHƯƠNG THỨC
1 Clear

Thiết lập một dãy các phần tử trong Array về 0, về false hoặc về null, phụ thuộc vào kiểu phần tử

2 Copy(Array, Array, Int32)

Sao chép một dãy các phần tử từ một Array bắt đầu từ phần tử đầu tiên và paste chúng vào trong Array khác bắt đầu tại phần tử đầu tiên. Độ dài (length) được xác định là một integer (32 bit)

3 CopyTo(Array, Int32)

Sao chép tất cả phần tử của Array một chiều hiện tại tới Array một chiều đã xác định bắt đầu tại chỉ mục mảng đích đến đã cho. Chỉ mục được xác định là một integer (32 bit)

4 GetLength

Lấy một số integer (32 bit) mà biểu diễn số phần tử trong chiều đã xác định của Array

5 GetLongLength

Lấy một số integer (64 bit) mà biểu diễn số phần tử trong chiều đã xác định của Array

6 GetLowerBound

Lấy giới hạn thấp hơn của chiều đã xác định trong Array

7 GetType

Lấy kiểu của instance (sự thể hiện) hiện tại (được kế thừa từ Object)

8 GetUpperBound

Lấy giới hạn ở trên của chiều đã xác định trong Array

9 GetValue(Int32)

Lấy giá trị tại vị trí đã xác định trong mảng một chiều. Chỉ mục được xác định là số integer (32)

10 IndexOf(Array, Object)

Tìm kiếm object đã cho và trả về chỉ mục về sự xuất hiện đầu tiên bên trong cả mảng một chiều đó

11 Reverse(Array)

Đảo ngược dãy phần tử trong cả mảng một chiều đó

12 SetValue(Object, Int32)

Thiết lập giá trị cho phần tử tại vị trí đã cho trong mảng một chiều. Chỉ mục được xác định là một số integer (32 bit)

13 Sort(Array)

Sắp xếp các phần tử trong cả mảng một chiều bởi sử dụng IComparable implementation của mỗi phần tử của mảng đó

14 ToString()

Trả về một chuỗi mà biểu diễn object hiện tại (được kế thừa từ Object)

Ví dụ ArrayClassDemo sau đây sẽ minh hoạ chi tiết cách thao tác dữ liệu thông qua lớp Array:

Complete and Continue