Kĩ thuật lập trình - Mảng

• Nhiều chương trình chúng ta viết là không có giao diện với các cửa sổ • Các đối số dòng lệnh sẽ được truyền cho chương trình thông qua lời gọi chương trình • Các đối số được truyền thông qua hàm Main • args - mảng các chuỗi 38

pdf50 trang | Chia sẻ: huyhoang44 | Lượt xem: 692 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Mảng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lê Viết Mẫn - lvman@hce.edu.vn Mảng v 1.0 - 11/2012 Mảng 1 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng2 chúng ta đã học... Programs = Data Structure + Algorithms Tuần tự Rẽ nhánh Lặp Hàm Cấu trúc chương trình Tổ chức dữ liệu bool char short int long float double string Kiểu dữ liệu Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng3 chúng ta sẽ học... Programs = Data Structure + Algorithms Tuần tự Rẽ nhánh Lặp Hàm Cấu trúc chương trình Tổ chức dữ liệu bool char short int long float double string Kiểu dữ liệu array Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng 1. Mảng 2. Chuỗi ký tự 3. Đối số dòng lệnh 4. Generics 4 Nội dung Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Cơ bản về Mảng Array 5 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Mảng là một tập liên tục có thứ tự các thành phần dữ liệu cùng kiểu được tham chiếu bằng cùng một tên định danh và một chỉ số • Giá trị của chỉ số nằm trong khoảng 0 .. size - 1 • C# kiểm tra phạm vi của mảng • Chương trình bị crash khi truy xuất thành phần vượt quá phạm vi mảng • Mảng là kiểu tham chiếu, được cấp phát trong bộ nhớ heap • Tất cả các mảng đều được tạo ra từ lớp System.Array • Trước khi sử dụng mảng, ta cần thực hiện 3 bước : 1. Khai báo mảng 2. Khởi tạo mảng (cấp phát bộ nhớ cho mảng) 3. Khởi gán giá trị cho mảng 6 Mảng Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Các khai báo mảng bao gồm kiểu dữ liệu, các cặp dấu ngoặc vuông và tên mảng • Số lượng dấu phẩy hoặc cặp ngoặc vuông thể hiện số chiều của mảng • Mảng được đặt tên theo quy tắc đặt tên biến 7 Khai báo type[] name; //mảng một chiều type[,] name; // mảng hai chiều type[][] name; // mảng hai chiều lởm chớm - Jagged type[][,] name; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Sử dụng từ khoá new • Các size có thể là một hằng số, biến, giá trị của biểu thức • Sau khi cấp phát bộ nhớ thì số chiều, kích thước mỗi chiều là không thể thay đổi (trừ khi cấp phát lại) • Các thành phần dữ liệu của mảng sẽ nhận giá trị mặc nhiên theo kiểu dữ liệu của mảng • Có thể vừa khai báo vừa khởi tạo mảng trong cùng một câu lệnh 8 Khởi tạo name = new type[sizes]; name = new type[sizes1,sizes2]; type[] name = new type[sizes]; type[,] name = new type[sizes1,sizes2]; type[][] name = new type[sizes1][]; ... // mảng jagged name = new type[sizes1][]; name[0] = new type[size2]; name[1] = new type[size3]; ... name[size1 - 1] = new type[sizen]; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng9 Mảng một chiều int[] test = new int[10]; // space for 10 ints 0 1 2 3 4 5 6 7 8 9 test[0] test[5] Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng10 Mảng hai chiều float[,] test_score = new float[4,10]; // space for 40 floats test_score[0,0] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 test_score[3,2] test_score[2,3] test_score[3,9] Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng11 Mảng lởm chởm hai chiều float[][] jagged = new float[4][]; jagged[0] = new float[10]; jagged[1] = new float[6]; jagged[2] = new float[8]; jagged[3] = new float[3]; jagged[0][0] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 jagged[3][2] jagged[2][5] jagged[0][9] Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng12 Mảng ba chiều double[,,] class_score = new double[5,5,10]; // space for 250 doubles , , , , , , , , Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Gán giá trị cho từng thành phần của mảng • Vừa khai báo, khởi tạo và khởi gán giá trị cho mảng • Đồng thời khởi tạo và gán giá trị 13 Khởi gán - mảng một chiều int[] ages = new int[4]; ages[0] = 20; ages[1] = 23; ages[2] = 23; ages[3] = 0; int[] ages = {20, 23, 23, 0}; int[] ages = new int[5] {20, 23, 23, 0}; int[] ages; ages = new int[] {20, 23, 23, 0}; ages = {20, 23, 23, 0}; // sai int[] ages = new int[] {20, 23, 23, 0}; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng14 Khởi gán - mảng nhiều chiều int[,] rects = new int[4,2]; rects[0,0] = 1; rects[0,1] = 2; ... rects[2,1] = 6; ... int[,] rects = {{1, 2}, {3, 4}, {5, 6}, {7, 8}}; int[,] rects = new int[,] {{1, 2}, {3, 4}, {5, 6}, {7, 8}}; int[,] rects; rects = new int[,] {{1, 2}, {3, 4}, {5, 6}, {7, 8}}; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng15 Khởi gán - mảng lởm chởm int[][,] jagged = new int[3][,]; jagged[0][0,0] = 1; jagged[0][0,1] = 2; ... jagged[2][1,1] = 6; ... int[][] jagged = new int[4][]; jagged = new int[5] {1, 2, 3, 4, 5}; jagged = new int[2] {3, 4}; jagged = new int[3] {5, 6, 7}; jagged = new int[5] {6, 7, 8, 9, 10}; int[][] jagged = new int[][] { new int[] {1, 2, 3, 4, 5}, new int[] {3, 4}, new int[] {5, 6, 7}, new int[] {6, 7, 8, 9, 10} }; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Các chỉ số có thể là kết quả của một biểu thức • Mảng thường được sử dụng cùng với các vòng lặp (for, while) • Mỗi vòng lặp cho một chiều của mảng • Chỉ số chạy từ 0 đến size - 1 (hoặc < size) 16 Sử dụng mảng // Nhập giá trị cho mảng for (int i = 0; i < test.Length; i++) test[i] = int.Parse(Console.ReadLine()); // In ra màn hình giá trị của mảng for (i = 0; i < 10; i++) % for (j = 0; j < 4; j++) % Console.Write(“{0} ”,test_score[i,j]); // In mảng jagged for (int i = 0; i < 4; i++) { for (int j = 0; j < jagged[i].Length; j++) Console.Write(“{0} ”, jagged[i][j]); Console.WriteLine(); } int[] inputs = new int[max]; int size = 0; string line; Console.Write("Enter first number:"); line = Console.ReadLine(); while (line != null) { % inputs[size] = int.Parse(line); % size++; % Console.Write("Enter next number:"); % line = Console.ReadLine(); } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng foreach • Cho phép duyệt qua tuần tự từng phần tử một của một mảng, một danh sách • Phù hợp hơn với mảng một chiều hoặc các danh sách 17 foreach (type identifier in expression) statement; foreach (int t in test) Console.Write(“{0} ”, t); foreach (int t in test_score) Console.Write(“{0} ”, t); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Biến mảng có kiểu tham chiếu • Khi viết • Có thể sao chép nội dung từng thành phần trong B sang A 18 Sao chép mảng A = B; for (int i = 0; i < A.Length; i++) A[i] = B[i]; 0x0a10 B 0x0a10 A a a a a a a Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng19 Mảng là trị trả về của hàm static string[] GetStringArray() { string[] strings = {“Hello”, “from”, “CSLT”}; return strings; } static void Main() { string[] strs = GetStringArray(); foreach (string s in strs) Console.WriteLine(s); } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Có thể truyền một mảng đã được khởi tạo cho một hàm • Trong định nghĩa hàm, tham số được khai báo như khai báo mảng • Có thể truyền bất kỳ mảng nào cùng số chiều và cùng kiểu cho các hàm này • Có thể dùng các tham chiếu ref và out cho các tham số mảng 20 Truyền mảng cho hàm static void function(int[] arg) static void function(int[,] arg) static void function(int[][] arg) static void PrintArray(int[] a) { % foreach (int n in a) % % Console.Write(“{0} ”, n); % Console.WriteLine(); } static int Main() { % int[] firstArray = {5, 10, 15}; % int[] secondArray = {2, 4, 6, 8}; % PrintArray(firstArray); % PrintArray(secondArray); % return 0; } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Tham số params • Từ khoá params cho phép truyền cho hàm một lượng tham số có kiểu xác định thông qua chỉ một tham số duy nhất • Có thể truyền vào một mảng hoặc danh sách các đối số (phân cách nhau bằng dấu phẩy) • Nếu còn có nhiều tham số khác thì, tham số params phải được đặt ở cuối 21 static double CalculateAverage(params double[] values) { double sum = 0; for (int i = 0; i < values.Length; i++) sum += values[i]; return sum / values.Length; } double average; average = CalculateAverage(4.0, 3.2, 5.7, 64.22, 87.2); double[] data = {4.0, 3.2, 5.7}; average = CalculateAverage(data); M ai n( ) Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng System.Array 22 Clear() Hàm tĩnh này gán giá trị mặc định (theo kiểu dữ liệu của mảng) cho tất cả các thành phần của mảng Copy() Hàm cho phép sao chép một phần của mảng này lên mảng khác CopyTo() Hàm này được sử dụng để sao chép các thành phần của mảng nguồn sang mảng đích GetLength() Hàm này trả về số lượng thành phần trên một chiều chỉ định của mảng IndexOf() Hàm này trả về chỉ số của giá trị xuất hiện đầu tiên trong mảng một chiều LastIndexOf() Hàm trả về chỉ số của giá trị xuất hiện cuối cùng trên mảng một chiều Length Thuộc tính này trả ra số lượng thành phần của mảng Rank Thuộc tính này trả ra số chiều của mảng Reverse() Hàm tĩnh này đảo ngược thứ tự các thành phần của một mảng một chiều Sort() Hàm tĩnh này sắp xếp một mảng một chiều kiểu cơ bản Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Một số ví dụ 23 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng24 Ví dụ - nhập xuất Đọc 10 số nguyên vào mảng numbers rồi in chúng theo thứ tự ngược lại static int Main() { % int[] numbers = new int[10]; % Console.Write("Enter ten numbers: "); % for (int i = 0; i < 10; i++) % % numbers[i] = int.Parse(Console.ReadLine()); % for (int i = 0; i < 10; i++) % % Console.Write("{0} ", numbers[9-i]); % Console.WriteLine(); return 0; } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng25 Ví dụ Đọc và số thẻ sinh viên, điểm hai bài thi và in ra danh sách điểm trung bình của từng sinh viên const int MAX = 100; static void Main(string[] args) { int[] idNumbers = new int[MAX]; int[] exam1 = new int[MAX]; int[] exam2 = new int[MAX]; int size, i; string line; % % // Doc so the sinh vien va diem bai thi % size = 0; % Console.Write("Enter ID number and two exam grades: "); % line = Console.ReadLine(); % while (line != null) % { string[] items = line.Split(); idNumbers[size] = int.Parse(items[0]); exam1[size] = int.Parse(items[1]); exam2[size] = int.Parse(items[2]); % Console.Write("Enter ID number and two exam grades: "); % line = Console.ReadLine(); size++; % } % % // In ra diem trung binh % Console.Write("\n\nIDNumbers\tAverage\n\n"); % for (i = 0; i < size; i++) % % Console.WriteLine("{0}\t{1}", idNumbers[i], (exam1[i] + exam2[i])/2); Console.ReadKey(); } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng26 Ví dụ - cộng ma trận double[,] a = new double[m,n]; double[,] b = new double[m,n]; double[,] c = new double[m,n]; for (i = 0; i < m; i++) % for (j = 0; j < n; j++) % % c[i,j] = a[i,j] + b[i,j]; A = a0,0 a1,0  am−1,0 a0,1 a1,1  am−1,1     a0,n−1 a1,n−1  am−1,n−1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ B = b0,0 b1,0  bm−1,0 b0,1 b1,1  bm−1,1     b0,n−1 b1,n−1  bm−1,n−1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ C = A + B→ ci, j = ai, j + bi, j Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng27 Ví dụ - nhân ma trận double[,] a = new double[m,p]; double[,] b = new double[p,n]; double[,] c = new double[m,n]; for (i = 0; i < m; i++) % for (j = 0; j < n; j++) % { % % c[i,j] = 0; % % for (k = 0; k < p; k++) % % % c[i,j] += a[i,k] + b[k,j]; % } C = AB→ ci, j = ai,kbk , j k=0 p−1 ∑ Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Chuỗi ký tự 28 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Sử dụng từ khoá string để khai báo một chuỗi ký tự • Tất cả các chuỗi đều dẫn xuất từ lớp System.String • Các chuỗi này là “bất di bất dịch” • giá trị của nó là không thể thay đổi một khi đã được tạo ra • các hàm sẽ trả ra các thay đổi trên một chuỗi mới, chuỗi gốc vẫn nguyên vẹn • Có thể xem chuỗi ký tự như một mảng một chiều các ký tự kết thúc bằng null (\0) • Mảng dài hơn 1 ký tự so với chuỗi ký tự mà nó lưu trữ • Trình biên dịch sẽ tự động thêm null vào cuối các hằng chuỗi 29 Chuỗi ký tự string st = "This is the initial string content"; st = "This is a different string content"; T h i s i s \0...st Stack Heap Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Các hằng chuỗi được bao trong cặp dấu nháy kép • Có thể bao gồm các ký tự escape • Chuỗi đúng nguyên văn (verbatim string) - bắt đầu bằng ký tự @ • dấu \ không được xem là ký tự escape, dấu “ phải được gấp đôi • chuỗi có thể được viết trên nhiều dòng 30 Chuỗi ký tự \’ ‘ \n dòng mới \” “ \r về đầu dòng \\ \ \t tab string path = "\\\\MyApp\\bin\\Debug"; string verPath = @"\\MyApp\bin\Debug"; string oneline = "Line One\nLine Two"; string twoline = @"Line One Line Two"; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng System.String 31 Length Thuộc tính trả ra độ dài của chuỗi Compare() Hàm tĩnh so sánh hai chuỗi Contains() Hàm xác định một chuỗi có chứa một chuỗi con được chỉ định Equals() Hàm kiểm tra sự giống nhau về nội dung của hai chuỗi Format() Hàm tĩnh định dạng một chuỗi sử dụng các thành tố cơ sở (số, chuỗi) và các token giữ chỗ Insert() Hàm này chèn một chuỗi vào chuỗi đã cho Remove() Replace() Hàm này trả ra bản sao của một chuỗi với những thay đổi (xoá hoặc thay thế ký tự) Split() Hàm này trả ra một mảng kiểu string chứa các chuỗi con được tách ra bằng các ký tự hoặc chuỗi phân tách Trim() Hàm này xoá ở đầu và cuối chuỗi các ký tự được chỉ định ToUpper() ToLower() Các hàm này tạo ra một bản sao của chuỗi hiện tại với tất cả các ký tự được in hoa hoặc in thường Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn • Truy xuất chuỗi • Nối chuỗi Mảng Một số thao tác với chuỗi 32 // hai cách như nhau string s3 = s1 + s2; string s4 = string.Concat(s1, s2); // in ra độ dài chuỗi Console.Write(s1.Length); Console.Write(s1[3]); // in ký tự g string s1 = "Programming"; string s2 = " C#"; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn • So sánh chuỗi • So sánh bằng Mảng Một số thao tác với chuỗi 33 if (s1 == s2) Console.Write("bằng nhau"); if (s1.Equals(s2)) Console.Write("bằng nhau"); if (string.Equals(s1, s2)) Console.Write("bằng nhau"); // 0 - bằng nhau // >0 - s1 lớn hơn s2 // <0 - s1 nhỏ hơn s2 int result = string.Compare(s1,s2); // không phân biệt chữ hoa, chữ thường result = string.Compare(s1,s2,true); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn • Sao chép • Tìm kiếm chuỗi • Chèn Mảng Một số thao tác với chuỗi 34 // vị trí trong chuỗi gốc, tính từ 0 Console.Write("Vị trí hai chữ m là ", s1.IndexOf("mm")); string s5 = string.Copy(s1); string s6 = s1; if (s2.EndsWith("#")) Console.Write("đúng vậy"); if (s2.StartsWith(" ")) Console.Write("đúng vậy"); string s7 = s3.Insert(12, "language"); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Tách chuỗi (split) 35 string s1 = "Trường Đại học Kinh tế, Đại học Huế"; // tạo mảng các ký tự được dùng để tách từ char[] delims = { ' ', ',' }; // kết quả tách được trả ra trong một mảng string string[] strs = s1.Split(delims, StringSplitOptions.RemoveEmptyEntries); foreach (string st in strs) Console.WriteLine(st); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng System.Text.StringBuilder • Lớp StringBuilder cho phép tạo và thay đổi các chuỗi • Khi bạn gọi các hàm của kiểu này, bạn thay đổi trực tiếp nội dung của chuỗi 36 StringBuilder sb = new StringBuilder("FANTASTIC GAMES"); sb.Append("\n"); sb.AppendLine("Half Life"); sb.AppendLine("Beyond Good and Evil"); sb.AppendLine("Deus Ex 2"); sb.AppendLine("System Shock"); Console.WriteLine(sb.ToString()); sb.Replace("2", "Invisible War"); Console.WriteLine(sb.ToString()); Console.WriteLine("sb has {0} chars.", sb.Length); Console.WriteLine(); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Đối số dòng lệnh 37 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng • Nhiều chương trình chúng ta viết là không có giao diện với các cửa sổ • Các đối số dòng lệnh sẽ được truyền cho chương trình thông qua lời gọi chương trình • Các đối số được truyền thông qua hàm Main • args - mảng các chuỗi 38 Đối số dòng lệnh (1/2) dir /s /w /p C:\”Program Files”\ static void Main(string[] args) static int Main(string[] args) Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng39 Đối số dòng lệnh (2/2) C:\>argdemo hello world from Hue static int Main(string[] args) foreach (string st in args) process(st); for (i = 1; i < args.Lenght; i++) process(args[i]); h e l l o \0 w o r l d \0 f r o m \0 H u e \0 args[0] args[1] args[2] args[3] Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng40 Ví dụ Viết chương trình tính tổng một dãy số được nhập vào theo đối số dòng lệnh static int Main(string[] args) { if (args.Length < 2) % { % % Console.Write("Correct usage : sum ...\n"); % % return 1; % } % int sum = 0; foreach (string st in args) % { sum += int.Parse(st); % } % % Console.Write("Sum of numbers : {0}", sum); Console.ReadKey(); % return 0; } C:\>sum 2 3 4 5 6 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Generics 41 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng System.Collections 42 • Mảng là cấu trúc dữ liệu (container) cơ bản nhất cho việc lưu trữ dữ liệu • Hữu dụng cho việc quản lý lượng nhỏ dữ liệu • Kích thước mảng là cố định • Cần có các cấu trúc dữ liệu mềm dẻo hơn • tăng, giảm kích thước tự động, dễ dàng • Namespace System.Collections ra đời cùng với phiên bản .NET 1.0 • Cung cấp một vài CTDL : ArrayList, Hashtable, Queue, SortedList, Stack • Nhưng các CTDL này mặc phải một số vấn đề : • Hiệu năng • An toàn kiểu Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Generics • Generics là kỹ thuật được đổi tên và có cải tiến của kỹ thuật khuôn hình trong các ngôn ngữ lập trình hướng đối tượng • Khuôn hình là kỹ thuật cho phép định nghĩa các hàm, lớp, cấu trúc dữ liệu,... chấp nhận kiểu dữ liệu hình thức tại thời điểm biên dịch và trong thời gian chạy nó mới nhận kiểu dữ liệu cụ thể • Từ bản 2.0, .NET cung cấp các generics sau trong namespace System.Collections.Generic 43 • Dictionary • List • LinkedList • Queue • SortedDictionary • SortedSet • Stack • HashSet Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng List 44 Add() Hàm chèn thêm một phần tử vào cuối danh sách BinarySearch() Hàm sử dụng thuật toán tìm kiếm nhị phân để tìm kiếm một phần tử nào đó Clear() Hàm xoá tất cả các phần tử trong danh sách Contains() Hàm xác định sự tồn tại của một phần tử xác định Count Thuộc tính cho biết số lượng phần tử hiện tại trong danh sách IndexOf() Hàm tìm kiếm một giá trị xác định và trả ra vị trí xuất hiện đầu tiên tính từ đầu danh sách của giá trị đó trong danh sách Insert() Hàm này chèn một phần tử mới vào danh sách LastIndexOf() Hàm tìm kiếm một giá trị xác định và trả ra vị trí xuất hiện đầu tiên tính từ cuối danh sách của giá trị đó trong danh sách Remove() Hàm xoá một phần tử xác định RemoveAt() Hàm xoá một phần tử tại vị trí chỉ định Reverse() Hàm đảo ngược thứ tự các thành phần của danh sách Sort() Hàm thực hiện sắp xếp danh sách theo thứ tự nào đó ToArray() Hàm trả ra danh sách dưới dạng một mảng Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Ví dụ • Khai báo, khởi tạo và khởi gán giá trị • Duyệt mảng • Chèn thêm phần tử mới 45 // khởi tạo danh sách và khởi gán giá trị List ageList = new List { 20, 21, 24, 25 }; // dùng foreach để duyệt qua mảng foreach (int age in ageList) Console.Write("{0} ", age); // chèn vào cuối danh sách ageList.Add(21); // chèn vào vị trí thứ 3 trong danh sách ageList.Insert(2, 45); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Ví dụ • Tìm kiếm và xoá • Chuyển ra mảng 46 // Contains trả ra giá trị true hoặc false if (ageList.Contains(21)) ageList.Remove(21); // BinarySearch, IndexOf, LastIndexOf là giống nhau // trả ra vị trí của giá trị tìm được (0 → count - 1) // nếu không có thì trả ra giá trị < 0 int index = ageList.IndexOf(21); if (index >= 0) ageList.RemoveAt(index); int[] ageArray = ageList.ToArray(); Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Stack 47 Clear() Hàm xoá tất cả các phần tử trong Stack Contains() Hàm xác định sự tồn tại của một phần tử xác định Count Thuộc tính cho biết số lượng phần tử hiện có trong Stack Peek() Hàm trả ra phần tử đầu tiên trong Stack, nhưng không xoá nó khỏi Stack Pop() Hàm trả ra phần tử đầu tiên trong Stack và xoá nỏ khỏi Stack Push() Hàm chèn một phần tử mới vào đầu Stack Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Ví dụ 48 string exp = "1 2 + 4 * 3 +"; string[] items = exp.Split(); // tách từng số và toán tử ra Stack stack = new Stack(); int num, left, right; foreach (string item in items) { if (int.TryParse(item, out num)) // thử đổi sang số stack.Push(num); // nếu được thì gán vào Stack else { // không được thì là toán tử right = stack.Pop(); // nên lấy ra hai số trong Stack left = stack.Pop(); // dựa theo toán tử để thực hiện phép toán switch (item) { case "+": num = left + right; break; case "-": num = left - right; break; case "*": num = left * right; break; case "/": num = left / right; break; } stack.Push(num); // kết quả được nhét vào lại Stack để tính tiếp } } num = stack.Pop(); // lấy kết quả ra khỏi Stack Console.Write(num); // in kết quả Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Mảng Queue 49 Clear() Hàm xoá tất cả các phần tử trong Stack Contains() Hàm xác định sự tồn tại của một phần tử xác định Count Thuộc tính cho biết số lượng phần tử hiện có trong Stack Dequeue() Hàm trả ra phần tử đầu tiên trong Queue và xoá nó khỏi Queue Enqueue() Hàm này thêm phần tử mới vào cuối Queue Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Cảm ơn sự chú ý Câu hỏi ? Mảng50 Monday, September 9, 13

Các file đính kèm theo tài liệu này:

  • pdf07_mang_1976.pdf