Giáo trình hình thành quy trình ứng dụng cấu tạo bo mạch mảng một chiều trong dấu ngoặc p4

10 4 0
Giáo trình hình thành quy trình ứng dụng cấu tạo bo mạch mảng một chiều trong dấu ngoặc p4

Đang tải... (xem toàn văn)

Thông tin tài liệu

. Ngôn Ngữ Lập Trình C# thông qua thứ tự của empID là một số nguyên. Do vậy việc so sánh sẽ được ủy quyền cho thành viên empID, đây là số nguyên và nó sẽ sử dụng phương thức so sánh mặc định của kiểu dữ liệu nguyên. Điều này tương đương với việc so sánh hai số nguyên. Lúc này chúng ta co thể thực hiện việc so sánh hai đối tượng Employee. Để thấy được cách sắp xếp, chúng ta cần thiết phải thêm vào các số nguyên vào trong mảng Employee, các số nguyên này được lấy một...

Ngơn Ngữ Lập Trình C# thơng qua thứ tự empID số nguyên Do việc so sánh ủy quyền cho thành viên empID, số nguyên sử dụng phương thức so sánh mặc định kiểu liệu nguyên Điều tương đương với việc so sánh hai số nguyên Lúc co thể thực việc so sánh hai đối tượng Employee Để thấy cách xếp, cần thiết phải thêm vào số nguyên vào mảng Employee, số nguyên lấy cách ngẫu nhiên Để tạo giá trị ngẫu nhiên, cần thiết lập đối tượng lớp Random, lớp trả số giả số ngẫu nhiên Phương thức Next() nạp chồng, phiên cho phép truyền vào số nguyên thể số ngẫu nhiên lớn mong muốn Trong trường hợp đưa vào số 10 để tạo số ngẫu nhiên từ đến 10: Random r = new Random(); r.Next(10); Ví dụ minh họa 9.13 tạo mảng số nguyên mảng Employee, sau đưa vào số ngẫu nhiên, in kết Sau xếp hai mảng in kết cuối  Ví dụ 9.13: Sắp xếp mảng số nguyên mảng Employee namespace Programming_CSharp { using System; using System.Collections; // lớp đơn giản để lưu trữ mảng public class Employee : IComparable { public Employee(int empID) { this.empID = empID; } public override string ToString() { return empID.ToString(); } public int EmpID { get { return empID; } set Mảng, Chỉ Mục, Tập Hợp 253 Ngơn Ngữ Lập Trình C# { empID = value; } } // So sánh delegate cho Employee // Employee sử dụng phương thức so sánh // mặc định số nguyên public int CompareTo(Object o) { Employee r = (Employee) o; return this.empID.CompareTo(r.empID); } private int empID; } public class Tester { static void Main() { ArrayList empArray = new ArrayList(); ArrayList intArray = new ArrayList(); Random r = new Random(); // đưa vào mảng for( int i = 0; i < 5; i++) { empArray.Add( new Employee(r.Next(10)+100)); intArray.Add( r.Next(10) ); } // in tất nội dung for(int i = 0; i < intArray.Count; i++) { Console.Write(“{0} ”,intArray[i].ToString()); } Console.WriteLine(“\n”); // in tất nội dung mảng for(int i = 0; i < empArray.Count; i++) { Console.Write(“{0} ”,empArray[i].ToString()); } 254 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# Console.WriteLine(“\n”); // xếp hiển thị mảng nguyên intArray.Sort(); for(int i = 0; i < intArray.Count; i++) { Console.Write(“{0} ”, intArray[i].ToString()); } Console.WriteLine(“\n”); // xếp lại mảng Employee empArray.Sort(); // hiển thị tất nội dung mảng Employee for(int i = 0; i < empArray.Count; i++) { Console.Write(“{0} ”, empArray[i].ToString()); } Console.WriteLine(“\n”); } } }  Kết quả: 105 3 103 102 103 107 104 102 105 107 104 Kết mảng số nguyên mảng Employee tạo với số ngẫu nhiên, sau chúng xếp hiển thị lại giá trị theo thứ tự sau xếp Thực thi IComparer Khi gọi phương thức Sort() ArrayList phương thức mặc định IComparer gọi, sử dụng phương pháp QuickSort để gọi thực thi IComparable phương thức CompareTo() thành phần ArrayList Chúng ta tự tạo thực thi IComparer riêng, điều cho phép ta tùy chọn cách thực việc xếp thành phần mảng Trong ví dụ minh họa tiếp sau đây, thêm trường thứ hai vào Employee yearsOfSvc Và Employee xếp theo hai loại empID yearsOfSvc 255 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# Để thực điều này, cần thiết phải tạo lại thực thi IComparer để truyền cho phương thức Sort() mảng ArrayList Lớp IComparer EmployeeComparer biết đối tượng Employee biết cách xếp chúng EmployeeComparer có thuộc tính, WhichComparision có kiểu Employee.EmployeeComparer.ComparisionType: public Employee.EmployeeComparer.ComparisionType WhichComparision { get { return whichComparision; } set { wichComparision = value; } } kiểu liệt kê với hai giá trị, empID hay yearsOfSvc, hai giá trị muốn xếp theo ID hay số năm phục vụ: ComparisionType public enum ComparisionType { EmpID, Yrs }; Trước gọi Sort(), tạo thể EmployeeComparer thiết lập giá trị cho thuộc tính kiểu ComparisionType: Employee.EmployeeComparer c = Employee.GetComparer(); c.WhichComparision = Employee.EmployeeComparer.ComparisionType.EmpID; empArray.Sort(c); Khi gọi Sort() ArrayList gọi phương thức Compare() EmployeeComparer, đến lượt ủy quyền việc so sánh cho phương thức Employee.CompareTo(), truyền vào thuộc tính WhichComparision nó: Compare(object lhs, object rhs) { Employee l = (Employee) lhs; Employee r = (Employee) rhs; return l.CompareTo(r.WhichComparision); } Đối tượng Employee phải thực thi phiên riêng CompareTo() để thực việc so sánh: Mảng, Chỉ Mục, Tập Hợp 256 Ngơn Ngữ Lập Trình C# public int CompareTo(Employee rhs, Employee.EmployeeComparer.ComparisionType which) { switch (which) { case Employee.EmployeeComparer.ComparisionType.EmpID: return this.empID.CompareTo( rhs.empID); case Employee.EmployeeComparer.ComparisionType.Yrs: return this.yearsOfSvc.CompareTo(rhs.yearsOfSvc); } return 0; } Sau ví dụ 9.14 thể đầy đủ việc thực thi IComparer phép thực xếp theo hai tiêu chuẩn khác Trong ví dụ mảng số ngun xóa để làm cho đơn giản hóa ví dụ  Ví dụ 9.14: Sắp xếp mảng theo tiêu chuẩn ID năm công tác namespace Programming_CSharp { using System; using System.Collections; //lớp đơn giản để lưu trữ mảng public class Employee : IComparable { public Employee(int empID) { this.empID = empID; } public Employee(int empID, int yearsOfSvc) { this.empID = empID; this.yearsOfSvc = yearsOfSvc; } public override string ToString() { return “ID: ”+empID.ToString() + “ Years of Svc: ” + yearsOfSvc.ToString(); } 257 Mảng, Chỉ Mục, Tập Hợp Ngôn Ngữ Lập Trình C# // phương thức tĩnh để nhận đối tượng Comparer public static EmployeeComparer GetComparer() { return new Employee.EmployeeComparer(); } public int CompareTo(Object rhs) { Employee r = (Employee) rhs; return this.empID.CompareTo(r.empID); } // thực thi đặc biệt gọi custom comparer public int CompareTo(Employee rhs, Employee.EmployeeComparer.ComparisionType which) { switch (which) { case Employee.EmployeeComparer.ComparisionType.EmpID: return this.empID.CompareTo( rhs.empID); case Employee.EmployeeComparer.ComparisionType.Yrs: return this.yearsOfSvc.CompareTo( rhs.yearsOfSvc); } return 0; } // lớp bên thực thi IComparer public class EmployeeComparer : IComparer { // định nghĩa kiểu liệt kê public enum ComparisionType { EmpID, Yrs }; // yêu cầu đối tượng Employee tự so sánh với public int Compare( object lhs, object rhs) { Employee l = (Employee) lhs; Employee r = (Employee) rhs; return l.CompareTo(r, WhichComparision); Mảng, Chỉ Mục, Tập Hợp 258 Ngơn Ngữ Lập Trình C# } public Employee.EmployeeComparer.ComparisionType WhichComparision { get { return whichComparision; } set { whichComparision = value; } } private Employee.EmployeeComparer.ComparisionType whichComparision; } private int empID; private int yearsOfSvc = 1; } public class Teser { static void Main() { ArrayList empArray = new ArrayList(); Random r = new Random(); // đưa vào mảng for(int i=0; i < 5; i++) { empArray.Add( new Employee(r.Next(10)+100, r.Next(20))); } // hiển thị tất nội dung mảng Employee for(int i=0; i < empArray.Count; i++) { Console.Write(“\n{0} ”, empArray[i].ToString()); } Console.WriteLine(“\n”); // xếp hiển thị mảng Employee.EmployeeComparer c = Employee.GetComparer(); c.WhichComparision = Employee.EmployeeComparer.ComparisionType.EmpID; 259 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# empArray.Sort(c); // hiển thị nội dung mảng for(int i=0; i < empArray.Count; i++) { Console.Write(“\n{0} ”, empArray[i].ToString()); } Console.WriteLine(“\n”); c.WhichComparision = Employee.EmployeeComparer.ComparisionType.Yrs; empArray.Sort(c); // hiển thị nội dung mảng for(int i=0; i < empArray.Count; i++) { Console.Write(“\n{0} ”, empArray[i].ToString()); } Console.WriteLine(“\n”); } } }  Kết quả: ID: 100 Years of Svc: 16 ID: 102 Years of Svc: ID: 107 Years of Svc: 17 ID: 105 Years of Svc: ID: 101 Years of Svc: ID: 100 Years of Svc: 16 ID: 101 Years of Svc: ID: 102 Years of Svc: ID: 105 Years of Svc: ID: 107 Years of Svc: 17 ID: 105 Years of Svc: ID: 101 Years of Svc: ID: 102 Years of Svc: ID: 100 Years of Svc: 16 ID: 107 Years of Svc: 17 Mảng, Chỉ Mục, Tập Hợp 260 Ngôn Ngữ Lập Trình C# Khối hiển thị kết thứ tự vừa nhập vào Trong giá trị empID, yearsOfSvc phát sinh ngẫu nhiên Khối thứ hai hiển thị kết sau theo empID, khối cuối thể kết xếp theo năm phục vụ Hàng đợi (Queue) Hàng đợi tập hợp có thứ tự vào trước trước (FIFO) Tương tự người mua vé tàu, họ xếp thành hàng, người vào trước mua trước trước Hàng đợi kiểu liệu tốt để quản lý nguồn tài nguyên giới hạn Ví dụ, muốn gởi thông điệp đến tài nguyên mà xử lý thông điệp lần Khi thiết lập hàng đợi thông điệp để xử lý thông điệp theo thứ tự đưa vào Lớp Queue thể kiểu liệu trên, bảng 9.4 sau liệt kê phương thức thuộc tính thành viên Phương thức- thuộc tính Synchronized() Count IsReadOnly IsSynchronized SyncRoot Clear() Clone() Contains() CopyTo() Dequeue() Enqueue() GetEnumerator() Peek() Mục đích Phương thức static trả Queue wrapper thread-safe Thuộc tính trả số thành phần hàng đợi Thuộc tính xác định hàng đợi đọc Thuộc tính xác định hàng đợi đồng Thuộc tính trả đối tượng sử dụng để đồng truy cập Queue Xóa tất thành phần hàng đợi Tạo Xác định xem thành phần có mảng Sao chép thành phần hàng đợi đến mảng chiều tồn Xóa trả thành phần bắt đầu hàng đợi Thêm thành phần vào hàng đợi Trả enumerator cho hàng đợi Trả phần tử hàng đợi khơng xóa Sao chép thành phần qua mảng Bảng 9.4: Những phương thức thuộc tính Queue Chúng ta thêm thành phần vào hàng đợi với phương thức Enqueue sau lấy chúng khỏi hàng đợi với Dequeue hay sử dụng enumerator Ví dụ 9.15 minh họa việc sử dụng hàng đợi  Ví dụ 9.15: Làm việc với hàng đợi ToArray() Mảng, Chỉ Mục, Tập Hợp 261 Ngơn Ngữ Lập Trình C# namespace Programming_CSharp { using System; using System.Collections; public class Tester { public static void Main() { Queue intQueue = new Queue(); // đưa vào mảng for(int i=0; i

Ngày đăng: 21/05/2021, 12:45

Tài liệu cùng người dùng

Tài liệu liên quan