Lập trình .NET và C#
Lecture 8 continue: MẢNG, CHỈ MỤC, VÀ TẬP HỢP TS Đào Nam Anh UTM, Khoa KH&CN
1
Resources
(cid:1) Các giải pháp lập trình C#, Nguyễn Ngọc Bình Phương - Thái Thanh Phong (cid:1) Allen Jones. C# Programmer's Cookbook. Microsoft Press, 2004 (cid:1)
John Connell. Coding Techniques for Microsoft Visual Basic .NET. Microsoft Press, 2002.
(cid:1) Harvey M. Deitel, Paul J. Deitel, & Tem R. Nieto. Visual Basic .NET How to
(cid:1)
(cid:1)
Program, Second Edition. Prentice Hall, 2002. Jose Mojica. C# and VB .NET Conversion Pocket Reference. O'Reilly, 2002. James Avery. Ten Must-Have Tools Every Developer Should Download Now. MSDN Magazine, 2004.
(cid:1) Karl Moore. The Ultimate VB.NET and ASP.NET Code Book. Apress, 2003 (cid:1) Matthew MacDonald. Microsoft Visual Basic .NET Programmer's Cookbook.
Microsoft Press, 2003.
(cid:1) Mark Schmidt & Simon Robinson. Microsoft Visual C# .NET 2003 Developer's
Cookbook. Sams Publishing, 2003.
(cid:1) Dương Quang Thiện. Lập trình Visual C# thế nào? Nhà xuất bản Tổng Hợp TP.
Hồ Chí Minh, 2005.
(cid:1) Nguyễn Ngọc Bình Phương & Lê Trần Nhật Quỳnh. Các giải pháp lập trình
Visual Basic .NET. Nhà xuất bản Giao thông Vận tải, 2006
(cid:1) www.msdn.microsoft.com, www.codeproject.com, www.msd2d.com,
www.developersdex.com, www.windowsforms.net, www.gotdotnet.com, www.codeguru.com, www.developerfusion.com
2
Mảng đa chiều Mảng đa chiều cùng kích thước
(cid:1) Mảng hai chiều được tổ chức thành các dòng và cột, trong đó các dòng là được tính theo hàng ngang của mảng, và các cột được tính theo hàng dọc của mảng.
(cid:1) Mảng ba chiều cũng có thể được tạo ra
nhưng thường ít sử dụng
(cid:1) Mảng đa chiều cùng kích thước còn gọi là mảng hình chữ nhật (rectanguler array).
3
Mảng đa chiều Mảng đa chiều kích thước khác nhau
(cid:1) kích thước của các chiều có thể không bằng nhau, điều này khác với mảng đa chiều cùng kích thước.
(cid:1) Nếu hình dạng của mảng đa chiều cùng kích thước có dạng hình chữ nhật thì hình dạng của mảng này không phải hình chữ nhật vì các chiều của chúng không điều nhau.
4
Mảng đa chiều Mảng đa chiều kích thước khác nhau
(cid:1) Khi chúng ta tạo một mảng đa chiều kích thước khác nhau thì chúng ta khai báo số dòng trong mảng trước.
(cid:1) Sau đó với mỗi dòng sẽ giữ một mảng, có kích thước bất kỳ. Những mảng này được khai báo riêng.
(cid:1) Sau đó chúng ta khởi tạo giá trị các thành
phần trong những mảng bên trong.
5
Mảng đa chiều Mảng đa chiều kích thước khác nhau
int [ ] [ ] myJaggedArray;
truy cập thành phần thứ năm của mảng thứ ba
bằng cú pháp:
myJagged-Array[2][4]
6
Mảng đa chiều Mảng đa chiều kích thước khác nhau
const int rows = 4; int[][] jaggedArray = new int[rows][]; jaggedArray[0] = new int[5]; jaggedArray[1] = new int[2]; jaggedArray[2] = new int[3]; jaggedArray[3] = new int[5]; // khởi tạo một vài giá trị cho các thành phần của mảng jaggedArray[0][3] = 15; jaggedArray[1][1] = 12; jaggedArray[2][1] = 9; jaggedArray[2][2] = 99; jaggedArray[3][0] = 10;
7
Chuyển đổi mảng
(cid:1) Những mảng có thể chuyển đổi với nhau nếu những chiều của chúng bằng nhau và nếu các kiểu của các thành phần có thể chuyển đổi được.
(cid:1) Chuyển đổi tường minh giữa các mảng xảy ra nếu các thành phần của những mảng có thể chuyển đổi tường minh.
(cid:1) Và ngược lại, chuyển đổi ngầm định của
mảng xảy ra nếu các thành phần của những mảng có thể chuyển đổi ngầm định.
8
System.Array
(cid:1) Lớp mảng Array chứa một số các phương thức hữu ích cho phép mở rộng những khả năng của mảng và làm cho mảng mạnh hơn những mảng trong ngôn ngữ khác
(cid:1) Hai phương thức tĩnh hữu dụng của lớp
Array là Sort() và Reverse().
9
System.Array
string[] myArray = {
“Who”, “is”,”Kitty”,”Mun”
}; Array.Reverse(myArray);
10
B(cid:2) ch(cid:5) m(cid:7)c
Bộ chỉ mục là một cơ chế cho phép các thành phần
client truy cập một tập hợp chứa bên trong một lớp bằng cách sử dụng cú pháp giống như truy cập mảng ([]). Chỉ mục là một loại thuộc tính đặc biệt và bao gồm các phương thức get() và set() để xác nhận những hành vi của chúng.
Chúng ta có thể khai báo thuộc tính chỉ mục bên trong
của lớp bằng cách sử dụng cú pháp như sau:
11
B(cid:2) ch(cid:5) m(cid:7)c
public string this[int index] {
get {
if ( index < 0 || index >= strings.Length) {
// xử lý chỉ mục sai
} return strings[index];
} set {
if ( index >= ctr) {
// xử lý lỗi chỉ mục không tồn tại
} else
strings[index] = value;
}
}
12
ArrayList - Danh sách m(cid:15)ng
(cid:1) hạn chế của kiểu dữ liệu mảng là kích thước cố
định. Nếu chúng ta không biết trước số lượng đối tượng trong một mảng sẽ được lưu giữ, thì sẽ khó khăn vì có thể chúng ta khai báo kích thước của mảng quá nhỏ (vượt quá kích thước lưu trữ của mảng) hoặc là kích thước quá lớn (dẫn đến lãng phí bộ nhớ).
(cid:1) Lớp ArrayList là một kiểu dữ liệu mảng mà kích
thước của nó được gia tăng một cách động theo yêu cầu.
13
Danh sách m(cid:15)ng
(cid:1) Khi tạo đối tượng ArrayList, không cần thiết phải định nghĩa số đối tượng mà nó sẽ chứa. (cid:1) Chúng ta thêm vào ArrayList bằng cách dùng
phương thức Add()
14
Danh sách m(cid:15)ng ArrayList intArray = new ArrayList(); for( int i = 0; i < 5; i++) {
intArray.Add( i*5 );
} // in tất cả nội dung for(int i = 0; i < intArray.Count; i++) {
Console.Write(“{0} ”,intArray[i].ToString());
}
15
Hàng đợi (Queue)
(cid:1) Hàng đợi là một tập hợp trong đó có thứ tự vào
trước và ra trước (FIFO)
(cid:1) Chúng ta có thể thêm những thành phần vào trong hàng đợi với phương thức Enqueue và sau đó lấy chúng ra khỏi hàng đợi với Dequeue
Queue intQueue = new Queue(); for(int i=0; i <5; i++) {
intQueue.Enqueue(i*5);
}
16
Hàng đợi
(cid:1) Chúng ta có thể thêm những thành phần vào trong hàng đợi với phương thức Enqueue và sau đó lấy chúng ra khỏi hàng đợi với Dequeue hay bằng sử dụng enumerator. (cid:1) Peek() Trả về phần tử đầu tiên của hàng đợi
và không xóa nó.
17
Ngăn x(cid:20)p (stack)
(cid:1) Ngăn xếp là một tập hợp mà thứ tự là vào trước ra sau hay vào sao ra trước (LIFO)
(cid:1) như một chồng đĩa được xếp trong nhà hàng. Đĩa ở trên cùng tức là đĩa xếp sau thì được lấy ra trước do vậy đĩa nằm dưới đáy tức là đĩa đưa vào đầu tiên sẽ được lấy ra sau cùng.
(cid:1) Hai phương thức chính cho việc thêm và xóa
từ stack là Push và Pop, Peek
18
CopyTo() và ToArray()
(cid:1) Ba lớp ArrayList, Queue, và Stack đều chứa
phương thức nạp chồng CopyTo() và ToArray() dể sao chép những thành phần của chúng qua một mảng.
(cid:1) Trong trường hợp của ngăn xếp phương thức
CopyTo() sẽ chép những thành phần của chúng đến mảng một chiều đa hiện hữu, và viết chồng lên nội dung của mảng bắt đầu tại chỉ mục mà ta xác nhận.
(cid:1) Phương thức ToArray() trả về một mảng mới với
những nội dung của những thành phần trong mảng.
19
Question
20