Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
136,1 KB
Nội dung
Mảng Mảng Bởi: Khuyet Danh Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo đối tượng Array Tuy nhiên, thật tạo đối tượng kiểu System.Array Mảng ngôn ngữ C# kết hợp cú pháp khai báo mảng theo kiểu ngôn ngữ C kết hợp với định nghĩa lớp thể mảng truy cập phương thức thuộc tính System.Array Một số thuộc tính phương thức lớp System.Array Các phương thức thuộc tính System.Array Thành viên Mô tả BinarySearch() Phương thức tĩnh public tìm kiếm mảng chiều đãsắp thứ tự Clear() Phương thức tĩnh public thiết lập thành phần mảngvề hay null Copy() Phương thức tĩnh public nạp chồng thực chépmột vùng mảng vào mảng khác CreateInstance() Phương thức tĩnh public nạp chồng tạo thể mớicho mảng IndexOf() Phương thức tĩnh public trả mục thể đầu tiênchứa giá trị mảng chiều LastIndexOf() Phương thức tĩnh public trả mục thể cuốicùng giá trị mảng chiều Reverse() Phương thức tĩnh public đảo thứ tự thành phần trongmảng chiều Sort() Phương thức tĩnh public xếp giá trị mảng mộtchiều IsFixedSize Thuộc tính public giá trị bool thể mảng có kích thướccố định hay không IsReadOnly Thuộc tính public giá trị bool thể mảng đọc haykhông 1/20 Mảng IsSynchronized Thuộc tính public giá trị bool thể mảng có hỗ trợ thread-safe Length Thuộc tính public chiều dài mảng Rank Thuộc tính public chứa số chiều mảng SyncRoot Thuộc tính public chứa đối tượng dùng để đồng truy cậptrong mảng GetEnumerator() Phương thức public trả IEnumerator GetLength() Phương thức public trả kích thước chiều cố địnhtrong mảng GetLowerBound() Phương thức public trả cận chiều xác định trongmảng GetUpperBound() Phương thức public trả cận chiều xác định trongmảng Initialize() Khởi tạo tất giá trị mảng kiểu giá trị cách gọibộ khởi dụng mặc định giá trị SetValue() Phương thức public thiết lập giá trị cho thành phần xácđịnh mảng Khai báo mảng Chúng ta khai báo mảng C# với cú pháp theo sau: [] Ta có khai báo sau: int[] myIntArray; Cặp dấu ngoặc vuông ([]) báo cho trình biên dịch biết khai báo mảng Kiểu liệu kiểu thành phần chứa bên mảng Trong ví dụ bên myIntArray khai báo mảng số nguyên Chúng ta tạo thể mảng cách sử dụng từ khóa new sau: myIntArray = new int[6]; Khai báo thiết lập bên nhớ mảng chứa sáu số nguyên 2/20 Mảng Dành cho lập trình viên Visual Basic, thành phần bắt đầu 0, cách thiết lập cận cận mảng, thiết lập lại kích thước mảng Điều quan trọng để phân biệt thân mảng (tập hợp thành phần) thành phần mảng Đối tượng myIntArray mảng, thành phần năm số nguyên lưu giữ Mảng ngôn ngữ C# kiểu liệu tham chiếu, tạo heap Do myIntArray cấp heap Những thành phần mảng cấp phát dựa kiểu liệu chúng Số nguyên kiểu liệu giá trị, thành phần myIntArray kiểu liệu giá trị, số nguyên boxing Một mảng kiểu liệu tham chiếu không chứa tham chiếu đến thành phần tạo heap Giá trị mặc định Khi tạo mảng có kiểu liệu giá trị, thành phần chứa giá trị mặc định kiểu liệu (xem bảng 4.2, kiểu liệu giá trị mặc định) Với khai báo: myIntArray = new int[5]; tạo mảng năm số nguyên, thành phần thiết lập giá trị mặc định 0, giá trị mặc định số nguyên Không giống với mảng kiểu liệu giá trị, kiểu tham chiếu mảng không khởi tạo giá trị mặc định Thay vào đó, chúng khởi tạo giá trị null Nếu cố truy cập đến thành phần mảng kiểu liệu tham chiếu trước chúng khởi tạo giá trị xác định, tạo ngoại lệ Giả sử tạo lớp Button Chúng ta khai báo mảng đối tượng Button với cú pháp sau: Button[] myButtonArray; tạo thể mảng sau: myButtonArray = new Button[3]; Chúng ta viết ngắn gọn 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 không tao mảng với tham chiếu đến ba đối tượng Button Thay vào việc tạo mảng 3/20 Mảng myButtonArray với ba tham chiếu null Để sử dụng mảng này, phải tạo gán đối tượng Button cho thành phần tham chiếu mảng Chúng ta tạo đối tượng vòng lặp sau gán đối tượng vào mảng Truy cập thành phần mảng Để truy cập vào thành phần mảng ta sử dụng toán tử mục ([]) Mảng dùng sở 0, mục thành phần mảng luôn Như ví dụ trước thành phần myArray[0] Như trình bày phần trước, mảng đối tượng, có thuộc tính Một thuộc tính hay sử dụng Length, thuộc tính báo cho biết số đối tượng mảng Một mảng đánh mục từ đến Length –1 Do có năm thành phần mảng mục là: 0, 1, 2, 3, Ví dụ sau minh họa việc sử dụng khái niệm mảng từ đầu chương tới Trong ví dụ lớp tên Tester tạo mảng kiểu Employee mảng số nguyên Tạo đối tượng Employee sau in hai mảng hình Làm việc với mảng namespace Programming_CSharp { using System; // tạo lớp đơn giản để lưu trữ mảng public class Employee { // khởi tạo lấy 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; } public class Tester { static void Main() { int[] intArray; Employee[] empArray; intArray = new int[5]; empArray = new Employee[3]; // tạo đối tượng đưa vào mảng for( int i = 0; i < empArray.Length; i++) { empArray[i] = new Employee(i+5); } // 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"); } } } } Kết quả: 4/20 Mảng 00000567 Ví dụ bắt đầu với việc định nghĩa lớp Employee, lớp thực thi khởi dựng lấy tham số nguyên Phương thức ToString() kế thừa từ lớp Object phủ để in giá trị empID đối tượng Employee Các kiểu tạo khai báo tạo thể hai mảng Mảng số nguyên tự động thiết lập giá trị mặc định cho số nguyên mảng Nội dung mảng Employee tạo lệnh vòng lặp Cuối cùng, nội dung hai mảng xuất hình console để đảm bảo kết mong muốn; năm giá trị đầu mảng nguyên, ba số sau mảng Employee Khởi tạo thành phần mảng Chúng ta khởi tạo nội dung mảng lúc tạo thể mảng cách đặt giá trị bên dấu ngoặc ({}) C# cung cấp hai cú pháp để khởi tạo thành phần mảng, cú pháp dài cú pháp ngắn: int[] myIntArray = new int[5] { 2, 4, 6, 8, 10}; int[] myIntArray = { 2, 4, 6, 8, 10}; Không có khác biệt hai cú pháp trên, hầu hết chương trình sử dụng cú pháp ngắn tự nhiên lười đánh nhiều lệnh người lập trình Sử dụng từ khóa params Chúng ta tạo phương thức sau hiển thị số nguyên hình console cách truyền vào mảng số nguyên sử dụng vòng lặp foreach để duyệt qua thành phần mảng Từ khóa params cho phép truyền số biến tham số mà không cần thiết phải tạo mảng Trong ví dụ kế tiếp, tạo phương thức tên DisplayVals(), phương thức lấy số biến tham số nguyên: public void DisplayVals( params int[] intVals) 5/20 Mảng Phương thức xem mảng thể mảng tạo tường minh truyền vào tham số Sau tự lặp qua thành phần mảng giống thực với mảng nguyên 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ảng, đơn giản truyền vào số nguyên, trình biên dịch kết hợp tham số vào mảng cho phương thức DisplayVals, ta gọi phương thức sau: t.DisplayVals(5,6,7,8); tự tạo mảng để truyền vào phương thức muốn: int [] explicitArray = new int[5] {1,2,3,4,5}; t.DisplayArray(explicitArray); Ví dụ sau cung cấp tất mã nguồn để minh họa sử dụng cú pháp params Minh họa sử dụng params namespace Programming_CSharp { using System; public class Tester { static void Main() { Tester t = new Tester(); t.DisplayVals(5,6,7,8); int[] explicitArray = new int[5] {1,2,3,4,5}; t.DisplayVals(explicitArray); } public void DisplayVals( params int[] intVals) { foreach (int i in intVals) { Console.WriteLine("DisplayVals {0}", i); } } } } Kết quả: DisplayVals 6/20 Mảng DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals - Câu lệnh lặp foreach Câu lệnh lặp foreach với người học ngôn ngữ C, từ khóa sử dụng ngôn ngữ Visual Basic Câu lệnh foreach cho phép lặp qua tất mục mảng hay tập hợp Cú pháp sử dụng lệnh lặp foreach sau: foreach ( in ) { // thực thông qua tương ứng với // mục mảng hay tập hợp } Do vậy, cải tiến ví dụ trước cách thay việc sử dụng vòng lặp for vòng lặp foreach để truy cập đến thành phần mảng Sử dụng foreach namespace Programming_CSharp { using System; // tạo lớp đơn giản để lưu trữ mảng public class Employee { // khởi tạo lấy 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; } public 7/20 Mảng class Tester { static void Main() { int[] intArray; Employee[] empArray; intArray = new int[5]; empArray = new Employee[3]; // tạo đối tượng đưa vào mảng for( int i = 0; i < empArray.Length; i++) { empArray[i] = new Employee(i+10); } // xuất mảng nguyên foreach (int i in intArray) { Console.Write(i.ToString()+"\t"); } // xuất mảng Employee foreach ( Employee e in empArray) { Console.WriteLine(e.ToString()+"\t"); } } } } Kết ví dụ tương tự ví dụ trước Tuy nhiên, với việc sử dụng vòng lặp for ta phải xác định kích thước mảng, sử dụng biến đếm tạm thời để truy cập đến thành phần mảng: for (int i = ; i < empArray.Length; i++) { Console.WriteLine(empArray[i].ToString()); } Thay vào ta sử dụng foreach , vòng lặp tự động trích mục mảng gán tạm vào tham chiếu đối tượng khai báo đầu vòng lặp: foreach ( Employee e in empArray) { Console.WriteLine(e.ToString()+"\t"); } Đối tượng trích từ mảng có kiểu liệu tương ứng Do sử dụng thành viên public đối tượng Mảng đa chiều Từ đầu chương đến nói đến mảng số nguyên hay mảng đối tượng Tất mảng mảng chiều Mảng chiều thành phần đơn giản đối tượng kiểu giá trị hay đối tượng tham chiếu Mảng tổ chức phức tạp thành phần mảng khác, việc tổ chức gọi mảng đa chiều Mảng hai chiều tổ chức thành dòng cột, dòng tính theo hàng ngang mảng, cột tính theo hàng dọc mảng Mảng ba chiều tạo thường sử dụng khó hình dung Trong mảng ba chiều dòng mảng hai chiều Ngôn ngữ C# hỗ trợ hai kiểu mảng đa chiều là: Mảng đa chiều kích thước: mảng dòng mảng có kích thước với Mảng hai hay nhiều hai chiều 8/20 Mảng Mảng đa chiều không kích thước: mảng dòng không kích thước với Mảng đa chiều kích thước Mảng đa chiều kích thước gọi mảng hình chữ nhật (rectanguler array) Trong mảng hai chiều cổ điển, chiều tính số dòng mảng chiều thứ hai tính số cột mảng Để khai báo mảng hai chiều, sử dụng cú pháp theo sau: [,] Ví dụ để khai báo mảng hai chiều có tên myRectangularArray để chứa hai dòng ba cột số nguyên, viết sau: int [ , ] myRectangularArray; Ví dụ tiếp sau minh họa việc khai báo, tạo thể hiện, khởi tạo in nội dung hình mảng hai chiều Trong ví dụ này, vòng lặp for sử dụng để khởi tạo thành phần mảng Mảng hai chiều namespace Programming_CSharp { using System; public class Tester { static void Main() { // khai báo số dòng số cột mảng const int rows = 4; const int columns = 3; // khai báo mảng 4x3 số nguyên int [,] rectangularArray = new int[rows, columns]; // khởi tạo thành phần mảng for(int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { rectangularArray[i,j] = i+j; } } // xuất nội dung hình for(int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { Console.WriteLine("rectangularArray[{0},{1}] = {2}", i, j, rectangularArray[i, j]); } } } } } Kết quả: rectangularArray[0,0] = 9/20 Mảng rectangularArray[0,1] = rectangularArray[0,2] = rectangularArray[1,0] = rectangularArray[1,1] = rectangularArray[1,2] = rectangularArray[2,0] = rectangularArray[2,1] = rectangularArray[2,2] = rectangularArray[3,0] = rectangularArray[3,1] = rectangularArray[3,2] = Trong ví dụ này, khai báo hai giá trị: const int rows = 4; const int columns = 3; hai giá trị sử dụng để khai báo số chiều mảng: int [,] rectangularArray = new int[rows, columns]; Trong cú pháp này, dấu ngoặc vuông int[,] khai báo kiểu liệu mảng số nguyên, dấu phẩy (,) mảng hai chiều (hai dấu phẩy khai báo mảng ba chiều, nhiều nữa) Việc tạo thể thực mảng lệnh new int[rows,columns] để thiết lập kích thước chiều Ở khai báo tạo thể kết hợp với Chương trình khởi tạo tất giá trị thành phần mảng thông qua hai vòng lặp for Lặp thông qua cột dòng Do đó, thành phần khởi tạo rectangularArray[0,0], rectangularArray[0,1] đến rectangularArray[0,2] Một điều thực xong chương trình chuyển 10/20 Mảng qua thực tiếp dòng tiếp tục: rectangularArray[1,0], rectangularArray[1,1], rectangularArray[1,2] Cho đến tất cột tất dòng duyệt qua tức tất thành phần mảng khởi tạo Như biết, khởi tạo mảng chiều cách sử dụng danh sách giá trị bên dấu ngoặc ({}) Chúng ta làm tương tự với mảng hai chiều Trong ví dụ sau khai báo mảng hai chiều rectangularArray, khởi tạo thành phần thông qua danh sách giá trị ngoặc, sau in nội dung nội dung Khởi tạo mảng đa chiều namespace Programming_CSharp { using System; public class Tester { static void Main() { // khai báo biến lưu số dòng số cột mảng const int rows = 4; const int columns = 3; // khai báo định nghĩa mảng 4x3 int[,] rectangularArray = { {0,1,2}, {3,4,5}, {6,7,8},{9,10,11} }; // xụất nội dung mảng for( int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { Console.WriteLine("rectangularArray[{0},{1}] = {2}", i, j, rectangularArray[i,j]); } } } } } Kết quả: rectangularArray[0,0] = rectangularArray[0,1] = rectangularArray[0,2] = rectangularArray[1,0] = rectangularArray[1,1] = rectangularArray[1,2] = rectangularArray[2,0] = rectangularArray[2,1] = rectangularArray[2,2] = 11/20 Mảng rectangularArray[3,0] = rectangularArray[3,1] = 10 rectangularArray[3,2] = 11 Ví dụ tương tự ví dụ trước, ví dụ thực việc khởi tạo trực tiếp tạo thể hiện: int[,] rectangularArray = { {0,1,2}, {3,4,5}, {6,7,8},{9,10,11} }; Giá trị gán thông qua bốn danh sách ngoặc móc, số có ba thành phần, bao hàm mảng 4x3 Nếu viết sau: int[,] rectangularArray = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }; tạo mảng 3x4 Mảng đa chiều có kích khác Cũng giới thiệu trước kích thước chiều không nhau, điều khác với mảng đa chiều kích thước Nếu hình dạng mảng đa chiều kích thước có dạng hình chữ nhật hình dạng mảng hình chữ nhật chiều chúng không điều Khi tạo mảng đa chiều kích thước khác khai báo số dòng mảng trước Sau với dòng giữ mảng, có kích thước Những mảng khai báo riêng Sau khởi tạo giá trị thành phần mảng bên Trong mảng này, chiều mảng chiều Để khai báo mảng đa chiều có kích thước khác ta sử dụng cú pháp sau, số ngoặc số chiều mảng: [] [] Chúng ta khai báo mảng số nguyên hai chiều khác kích thước tên myJaggedArray sau: 12/20 Mảng int [] [] myJaggedArray; Chúng ta truy cập thành phần thứ năm mảng thứ ba cú pháp: myJagged- Array[2][4] Ví dụ sau tạo mảng khác kích thước tên myJaggedArray, khởi tạo thành phần, sau in hình Để tiết kiệm thời gian, sử dụng mảng số nguyên để thành phần tự động gán giá trị mặc định Và ta cần gán số giá trị cần thiết Mảng khác chiều namespace Programming_CSharp { using System; public class Tester { static void Main() { const int rows = 4; // khai báo mảng tối đa bốn dòng int[][] jaggedArray = new int[rows][]; // dòng có phần tử jaggedArray[0] = new int[5]; // dòng thứ hai có phần tử jaggedArray[1] = new int[2]; // dòng thứ ba có phần tử jaggedArray[2] = new int[3]; // dòng cuối có phần tử jaggedArray[3] = new int[5]; // khởi tạo vài giá trị cho thành phần mảng jaggedArray[0][3] = 15; jaggedArray[1][1] = 12; jaggedArray[2][1] = 9; jaggedArray[2][2] = 99; jaggedArray[3][0] = 10; jaggedArray[3][1] = 11; jaggedArray[3][2] = 12; jaggedArray[3][3] = 13; jaggedArray[3][4] = 14; for(int i = 0; i < 5; i++) { Console.WriteLine("jaggedArray[0][{0}] = {1}", i, jaggedArray[0][i]); } for(int i = 0; i < 2; i++) { Console.WriteLine("jaggedArray[1][{0}] = {1}", i, jaggedArray[1][i]); } for(int i = 0; i < 3; i++) { Console.WriteLine("jaggedArray[2][{0}] = {1}", i, jaggedArray[2][i]); } for(int i = 0; i < 5; i++) { Console.WriteLine("jaggedArray[3][{0}] = {1}", i, jaggedArray[3][i]); } } } } Kết quả: jaggedArray[0][0] = 13/20 Mảng jaggedArray[0][1] = jaggedArray[0][2] = jaggedArray[0][3] = 15 jaggedArray[0][4] = jaggedArray[1][0] = jaggedArray[1][1] = 12 jaggedArray[2][0] = jaggedArray[2][1] = jaggedArray[2][2] = 99 jaggedArray[3][0] = 10 jaggedArray[3][1] = 11 jaggedArray[3][2] = 12 jaggedArray[3][3] = 13 jaggedArray[3][4] = 14 Trong ví dụ này, mảng tạo với bốn dòng: int[][] jaggedArray = new int[rows][]; Chiều thứ hai không xác định Do sau khai báo dòng có kích thước khác Bốn lệnh sau tạo cho dòng mảng chiều có kích thước khác nhau: // dòng có phần tử jaggedArray[0] = new int[5]; // dòng thứ hai có phần tử 14/20 Mảng jaggedArray[1] = new int[2]; // dòng thứ ba có phần tử jaggedArray[2] = new int[3]; // dòng cuối có phần tử jaggedArray[3] = new int[5]; Sau tạo dòng cho mảng xong, ta thực việc đưa giá trị vào thành phần mảng Và cuối xuất nội dung mảng hình Khi truy cập thành phần mảng kích thước nhau, đặt tất mục chiều vào dấu ngặc vuông: rectangularArray[i,j] Tuy nhiên với mảng có kích thước khác ta phải để mục chiều đấu ngoặc vuông riêng: jaggedArray[i][j] Chuyển đổi mảng Những mảng chuyển đổi với chiều chúng kiểu thành phần chuyển đổi Chuyển đổi tường minh mảng xảy thành phần mảng chuyển đổi tường minh Và ngược lại, chuyển đổi ngầm định mảng xảy thành phần mảng chuyển đổi ngầm định Nếu mảng chứa tham chiếu đến đối tượng tham chiếu, chuyển đổi tới mảng đối tượng sở Ví dụ sau minh họa việc chuyển đổi mảng kiểu Button đến mảng đối tượng Chuyển đổi mảng namespace Programming_CSharp { using System; // tạo lớp để lưu trữ mảng public class Employee { public Employee( int empID) { this.empID = empID; } public override string ToString() { return empID.ToString(); } // 15/20 Mảng biến thành viên private int empID; private int size; } public class Tester { // phương thức lấy mảng object // truyền vào mảng đối tượng Employee // sau mảng string, có chuyển đổi ngầm // hai điều dẫn xuất từ lớp object public static void PrintArray(object[] theArray) { Console.WriteLine("Contents of the Array: {0}", theArray.ToString()); // in thành phần mảng foreach (object obj in theArray) { // trình biên dịch gọi obj.ToString() Console.WriteLine("Value: {0}", obj); } } static void Main() { // tạo mảng đối tượng Employee Employee[] myEmployeeArray = new Employee[3]; // khởi tạo đối tượng mảng for (int i = 0; i < 3; i++) { myEmployeeArray[i] = new Employee(i+5); } // hiểu thị giá trị mảng PrintArray( myEmployeeArray ); // tạo mảng gồm hai chuỗi string[] array ={ "hello", "world"}; // xuất nội dung chuỗi PrintArray( array ); } } } Kết quả: Contents of the Array Programming_CSharp.Employee[] Value: Value: Value: Contents of the Array Programming_CSharp.String[] Value: hello Value: world Ví dụ bắt đầu việc tạo lớp đơn giản Employee ví dụ trước Lớp Tester thêm phương thức tĩnh PrintArray() để xuất nội dung mảng, phương thức có khai báo tham số mảng chiều đối tượng object: public static void PrintMyArray( object[] theArray) 16/20 Mảng object lớp sở ngầm định cho tất đối tượng môi trường NET, nên khai báo ngầm định cho hai lớp string Employee Phương thức PrintArray thực hai hành động Đầu tiên, gọi phương thức ToString() mảng: Console.WriteLine("Contents theArray.ToString()); of the Array {0}", Tên kiểu liệu mảng in ra: Contents of the Array Programming_CSharp.Employee[] Contents of the Array System.String[] Sau phương thức PrintArray thực tiếp việc gọi phương thức ToString() thành phần mảng nhận Do ToString() phương thức ảo lớp sở object, thực phủ lớp Employee Nên phương thức ToString() lớp Employee gọi Việc gọi ToString() không cần thiết, gọi hại giúp cho ta đối xử với đối tượng cách đa hình System.Array Lớp mảng Array chứa số phương thức hữu ích cho phép mở rộng khả mảng làm cho mảng mạnh mảng ngôn ngữ khác (xem bảng 9.1) Hai phương thức tĩnh hữu dụng lớp Array Sort() Reverse() Có cách hỗ trợ đầy đủ cho kiểu liệu nguyên thủy kiểu Đưa mảng làm việc với kiểu khác Button có số khó khăn Ví dụ sau minh họa việc sử dụng hai phương thức để thao tác đối tượng chuỗi Sử dụng Array.Sort() Array.Reverse() namespace Programming_CSharp { using System; public class Tester { public static void PrintArray(object[] theArray) { foreach( object obj in theArray) { Console.WriteLine("Value: {0}", obj); } Console.WriteLine("\n"); } static void Main() { string[] myArray = { "Who", "is","Kitty","Mun" }; PrintArray( 17/20 Mảng myArray ); Array.Reverse( myArray ); PrintArray( myArray ); string[] myOtherArray = { "Chung", "toi", "la", "nhung","nguoi","lap","trinh", "may", "tinh" }; PrintArray( myOtherArray ); Array.Sort( myOtherArray ); PrintArray( myOtherArray ); } } } Kết quả: Value: Who Value: is Value: Kitty Value: Mun Value: Mun Value: Kitty Value: is Value: Who Value: Chung Value: toi Value:la Value: nhung Value: nguoi Value: lap Value: trinh Value: may Value: tinh 18/20 Mảng Value: Chung Value: la Value: lap Value: may Value: nguoi Value: nhung Value: tinh Value: toi Value: trinh Ví dụ bắt đầu việc tạo mảng myArray, mảng chuỗi với từ sau: “Who”, “is”, “Kitty”, ”Mun” mảng in ra, sau truyền vào cho hàm Array.Reverse(), kết thấy kết chuỗi sau: Value: Mun Value: Kitty Value: is Value: Who Tương tự vậy, ví dụ tạo mảng thứ hai, myOtherArray, chứa từ sau: “Chung”, “toi”, “la”, “nhung”,”nguoi”,”lap”,”trinh”, “máy”, “tính” Sau gọi phương thức Array.Sort() thành phần mảng xếp lại theo thứ tự alphabe: Value: Chung 19/20 Mảng Value: la Value: lap Value: may Value: nguoi Value: nhung Value: tinh Value: toi Value: trinh 20/20 [...]... của chúng không điều nhau 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 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 Sau đó chúng ta khởi tạo giá trị các thành phần trong những mảng bên trong Trong mảng này, mỗi chiều là một mảng một chiều Để khai báo mảng đa chiều có kích thước khác nhau ta sử dụng... 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 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 Nếu một mảng chứa những tham chiếu đến những đối tượng tham chiếu, một chuyển đổi có thể được tới một mảng của những đối tượng cơ sở Ví dụ sau minh họa việc chuyển đổi một mảng kiểu Button đến một mảng những... phần, bao hàm một mảng 4x3 Nếu chúng ta viết như sau: int[,] rectangularArray = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }; thì sẽ tạo ra một mảng 3x4 Mảng đa chiều có kích khác nhau Cũng như giới thiệu trước 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 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... Và cuối cùng là xuất nội dung của mảng ra màn hình Khi chúng ta truy cập các thành phần của mảng kích thước bằng nhau, chúng ta đặt tất cả các chỉ mục của các chiều vào trong cùng dấu ngặc vuông: rectangularArray[i,j] Tuy nhiên với mảng có kích thước khác nhau ta phải để từng chỉ mục của từng chiều trong đấu ngoặc vuông riêng: jaggedArray[i][j] Chuyển đổi mảng Những mảng có thể chuyển đổi với nhau nếu... nhau ta sử dụng cú pháp sau, khi đó số ngoặc chỉ ra số chiều của mảng: [] [] Chúng ta có thể khai báo mảng số nguyên hai chiều khác kích thước tên myJaggedArray như sau: 12/20 Mảng int [] [] myJaggedArray; Chúng ta có thể 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] Ví dụ sau tạo ra mảng khác kích thước tên myJaggedArray, khởi tạo các thành phần, rồi... với các đối tượng một cách đa hình System.Array 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 (xem bảng 9.1) Hai phương thức tĩnh hữu dụng của lớp Array là Sort() và Reverse() Có một cách hỗ trợ đầy đủ cho những kiểu dữ liệu nguyên thủy như là kiểu Đưa mảng làm việc với những kiểu khác như Button có một... mỗi dòng một mảng một chiều có kích thước khác nhau: // dòng đầu tiên có 5 phần tử jaggedArray[0] = new int[5]; // dòng thứ hai có 2 phần tử 14/20 Mảng jaggedArray[1] = new int[2]; // dòng thứ ba có 3 phần tử jaggedArray[2] = new int[3]; // dòng cuối cùng có 5 phần tử jaggedArray[3] = new int[5]; Sau khi tạo các dòng cho mảng xong, ta thực hiện việc đưa các giá trị vào các thành phần của mảng Và cuối... giữa những mảng namespace Programming_CSharp { using System; // tạo lớp để lưu trữ trong mảng public class Employee { public Employee( int empID) { this.empID = empID; } public override string ToString() { return empID.ToString(); } // 15/20 Mảng biến thành viên private int empID; private int size; } public class Tester { // phương thức này lấy một mảng các object... obj.ToString() Console.WriteLine("Value: {0}", obj); } } static void Main() { // tạo mảng các đối tượng Employee Employee[] myEmployeeArray = new Employee[3]; // khởi tạo các đối tượng của mảng for (int i = 0; i < 3; i++) { myEmployeeArray[i] = new Employee(i+5); } // hiểu thị giá trị của mảng PrintArray( myEmployeeArray ); // tạo mảng gồm hai chuỗi string[] array ={ "hello", "world"}; // xuất ra nội dung của... dung của mảng, phương thức này có khai báo một tham số là mảng một chiều các đối tượng object: public static void PrintMyArray( object[] theArray) 16/20 Mảng object là lớp cơ sở ngầm định cho tất cả các đối tượng trong môi trường NET, nên nó được khai báo ngầm định cho cả hai lớp string và Employee Phương thức PrintArray thực hiện hai hành động Đầu tiên, là gọi phương thức ToString() của mảng: Console.WriteLine("Contents ... Trong mảng ba chiều dòng mảng hai chiều Ngôn ngữ C# hỗ trợ hai kiểu mảng đa chiều là: Mảng đa chiều kích thước: mảng dòng mảng có kích thước với Mảng hai hay nhiều hai chiều 8/20 Mảng Mảng đa... đối tượng Mảng đa chiều Từ đầu chương đến nói đến mảng số nguyên hay mảng đối tượng Tất mảng mảng chiều Mảng chiều thành phần đơn giản đối tượng kiểu giá trị hay đối tượng tham chiếu Mảng tổ chức... khai báo số dòng mảng trước Sau với dòng giữ mảng, có kích thước Những mảng khai báo riêng Sau khởi tạo giá trị thành phần mảng bên Trong mảng này, chiều mảng chiều Để khai báo mảng đa chiều có