MẢNG, CHỈ MỤC, VÀ TẬP HỢP
· Mảng· Khai báo mảng
· Giá trị mặc định· Truy cập các thành phần trong mảng· Khởi tạo thành phần trong mảng
· Sử dụng từ khóa params· Câu lệnh lặp foreach· Mảng đa chiều· Mảng đa chiều cùng kích thước· Mảng đa chiều kích thước khác nhau
• Hastables
• Giao diện IDictionary
• Tập khoá và tập giá trị
• Giao diện IDictionaryEnumerator· Câu hỏi & bài tập
Môi trường .NET cung cấp rất đa dạng số lượng các lớp về tập hợp, bao gồm:
Array, ArrayList, Queue, Stack, BitArray, NameValueCollection, và
StringCollection.
Trong số đó tập hợp đơn giản nhất là Array, đây là kiểu dữ liệu tập hợp mà ngôn
ngữ C# hỗ trợ xây dựng sẵn. Chương này chúng ta sẽ tìm hiểu cách làm việc với
mảng một chiều, mảng đa chiều, và mảng các mảng (jagged array). Chúng ta cũng
được giới thiệu phần chỉ mục indexer, đây là cách thiết lập để làm cho việc truy cập
những thuộc tính giống nhau trở nên đơ
n giản hơn, một lớp được chỉ mục thì giống
như một mảng.
.NET cũng cung cấp nhiều các giao diện, như IEnumerable và ICollection.
Những phần thực thi của các giao diện này cung cấp các tiêu chuẩn để tương tác với
các tập hợp. Trong chương này chúng ta sẽ được cách sử dụng hiệu quả của các
giao diện. Cũng thông qua chương này chúng ta sẽ được giới thiệu cách sử dụng
chung của các tậ
Copy()
Phương thức tĩnh public đã nạp chồng thực hiện sao
chép
mộ
t
vùng của
m
ảng vào
m
ảng khác.
CreateInstance()
Phương thức tĩnh public đã nạp chồng tạo một thể hiện
mới
cho mảng
IndexOf()
Phương thức tĩnh public trả về chỉ mục của thể hiện đầu
tiên
chứa giá trị trong mảng một chiều
LastIndexOf()
Phương thức tĩnh public trả về chỉ mục của thể hiện
cuối
cùng của giá t
r
ị trong m
ả
ng mộtchiều
Reverse()
Phương thức tĩnh public đảo thứ tự của các thành phần
trong
mảng một chiều
Phương thức public trả về IEnumerator
GetLength()
Phương thức public trả về kích thước của một chiều cố
định
trong mảng
GetLowerBound()
Phương thức public trả về cận dưới của chiều xác định
trong
mảng
GetUpperBound()
Phương thức public trả về cận trên của chiều xác định
trong
mảng
Initialize()
Khởi tạo tất cả giá trị trong mảng kiểu giá trị bằng cách
gọi
b
ộ khởi dụng m
ặ
c định của từng giá t
r
ị.
SetValue()
Phương thức public thiết lập giá trị cho một thành phần
xác
định trong
m
ả
ng.
Bảng 9.1: Các phương thức và thuộc tính của System.Array.
được tạo ra trên heap.
Giá trị mặc định
Khi chúng ta tạo một mảng có kiểu dữ liệu giá trị, mỗi thành phần sẽ chứa giá trị mặc
định của kiểu dữ liệu (xem bảng 4.2, kiểu dữ liệu và các giá trị mặc định). Với khai báo:
myIntArray = new int[5];
sẽ tạo ra một mảng năm số nguyên, và mỗi thành phần được thiết lập giá trị mặc định
là 0, đây cũng là giá trị mặc định của số nguyên.
Không giống với mảng kiểu dữ liệu giá trị, những kiểu tham chiếu trong một mảng
không được khởi tạo giá trị mặc định. Thay vào đó, chúng sẽ được khởi tạo giá trị null.
Nếu chúng ta cố truy cậ
p đến một thành phần trong mảng kiểu dữ liệu tham chiếu
trước khi chúng được khởi tạo giá trị xác định, chúng ta sẽ tạo ra một ngoại lệ.
Giả sử chúng ta tạo ra một lớp Button. Chúng ta khai báo một mảng các đối tượng
Button với cú pháp sau:
Button[] myButtonArray;
và chúng ta tạo thể hiện của mảng như sau:
myButtonArray = new Button[3];
Ghi chú: chúng ta có thể viết ngắn gọn như sau:
Button muButtonArray = new Button[3];
Không giống với ví dụ mả
ng số nguyên trước, câu lệnh này không tao ra một mảng
với những tham chiếu đến ba đối tượng Button. Thay vào đó việc này sẽ
tạo ra một mảng myButtonArray với ba tham chiếu null. Để sử dụng mảng này,
đầu tiên chúng ta phải tạo và gán đối tượng Button cho từng thành phần tham chiếu
trong mảng. Chúng ta có thể tạo đối tượng trong vòng lặp và sau đó gán từng đối
// tạo một lớp đơn giản để lưu trữ trong mảng
public class Employee
{// bộ khởi tạo lấy một tham số
public Employee( int empID )
{this.empID = empID;
}public override string ToString()
{return empID.ToString();
}// biến thành viên private
private int empID;
private int size;
}
// xuất mảng nguyên
for( int i = 0; i < intArray.Length; i++)
{Console.Write(intArray[i].ToString()+”\t”
);
}
// xuất mảng Employee
for( int i = 0; i < empArray.Length; i++)
{Console.WriteLine(empArray[i].ToString()+”\t”);
}
}
}
Sử dụng từ khóa params
Chúng ta có thể tạo một phương thức rồi sau đó hiển thị các số nguyên ra
màn hình console bằng cách truyền vào một mảng các số nguyên và sử dụng
vòng lặp foreach để duyệt qua từng thành phần trong mảng. Từ khóa params cho
phép chúng ta truyền một số biến của tham số mà không cần thiết phải tạo một mảng.
Trong ví dụ kế tiếp, chúng ta s
ẽ tạo một phương thức tên DisplayVals(), phương thức
này sẽ lấy một số các biến của tham số nguyên:
public void DisplayVals( params int[] intVals)
Phương thức có thể xem mảng này như thể một mảng được tạo ra tường minh và được
truyền vào tham số. Sau đó chúng ta có thể tự do lặp lần lượt qua các thành phần
trong mảng giống như thực hiện với bất cứ mảng nguyên nào khác:
foreach (int i in intVals)
{Console.WriteLine(“DisplayVals: {0}”, i);
}Tuy nhiên, phương thức gọi không cần thiết phải tạo tường minh một mảng, nó chỉ
đơn giản truyền vào các số nguyên, và trình biên dịch sẽ kết hợp những tham số
này vào trong một mảng cho phương thức DisplayVals, ta có thể gọi phương thức như
sau:
t.DisplayVals(5,6,7,8);
và chúng ta có thể tự do tạo một mảng để truyền vào phương thức nếu
t.DisplayVals(explicitArray);
}public void DisplayVals( params int[] intVals)
{foreach (int i in intVals)
{
Console.WriteLine(“DisplayVals {0}”,
i);
}
}
}
} Kết quả: