1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình phân tích cấu tạo bo mạch mảng một chiều các giá trị bên trong dấu ngoặc p7 pdf

5 369 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 485,51 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. Lúc này chúng ta co thể thực hiện việc

Trang 1

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 cách ngẫu nhiên Để tạo một giá trị ngẫu nhiên, chúng ta cần thiết lập một đối tượng của lớp Random, lớp này sẽ trả về một số giả số ngẫu nhiên Phương thức Next() được nạp chồng, trong đó một phiên bản cho phép chúng ta truyền vào một số nguyên thể hiện một số ngẫu nhiên lớn nhất mong muốn Trong trường hợp này chúng ta đưa vào số 10 để tạo ra những số ngẫu nhiên từ 0 đến 10:

Random r = new Random();

r.Next(10);

Ví dụ minh họa 9.13 tạo ra một mảng các số nguyên và một mảng Employee, sau đó đưa vào những số ngẫu nhiên, rồi in kết quả Sau đó sắp xếp cả hai mảng và in kết quả cuối cùng.

Ví dụ 9.13: Sắp xếp mảng số nguyên và mảng Employee.

-namespace Programming_CSharp

{

using System;

using System.Collections;

// một lớp đơn giản để lưu trữ trong 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

Trang 2

{ empID = value;

} }

// So sánh được delegate cho Employee

// Employee sử dụng phương thức so sánh

// mặc định của 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 cả nội dung for(int i = 0; i < intArray.Count; i++) {

Console.Write(“{0} ”,intArray[i].ToString());

} Console.WriteLine(“\n”);

// in tất cả nội dung của mảng for(int i = 0; i < empArray.Count; i++) {

Console.Write(“{0} ”,empArray[i].ToString());

}

Trang 3

// sắp xếp và 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”);

// sắp xếp lại mảng Employee

empArray.Sort();

// hiển thị tất cả nội dung của mảng Employee

for(int i = 0; i < empArray.Count; i++)

{

Console.Write(“{0} ”, empArray[i].ToString());

}

Console.WriteLine(“\n”);

}

}

}

- Kết quả:

8 5 7 3 3

105 103 107 104 102

3 3 5 7 8

102 103 104 105 107

-Kết quả chỉ ra rằng mảng số nguyên và mảng Employee được tạo ra với những số ngẫu nhiên,

và sau đó chúng được sắp xếp và được hiển thị lại giá trị mới theo thứ tự sau khi sắp xếp.

Thực thi IComparer

Khi chúng ta gọi phương thức Sort() trong ArrayList thì phương thức mặc định của

IComparer được gọi, nó sử dụng phương pháp QuickSort để gọi thực thi IComparable

phương thức CompareTo() trong mỗi thành phần của ArrayList.

Chúng ta có thể tự do tạo một thực thi của IComparer riêng, điều này cho phép ta có thể tùy chọn cách thực hiện việc sắp xếp các thành phần trong mảng Trong ví dụ minh họa tiếp sau đây, chúng ta sẽ thêm trường thứ hai vào trong Employee là yearsOfSvc Và Employee có thể được sắp xếp theo hai loại là empID hoặc là yearsOfSvc

Trang 4

Để thực hiện được điều này, chúng ta cần thiết phải tạo lại sự thực thi của IComparer để truyền cho phương thức Sort() của mảng ArrayList Lớp IComparerEmployeeComparer biết

về những đối tượng Employee và cũng biết cách sắp xếp chúng EmployeeComparer có một thuộc tính, WhichComparision có kiểu là Employee.EmployeeComparer.ComparisionType:

public Employee.EmployeeComparer.ComparisionType WhichComparision

{

get

{

return whichComparision;

}

set

{

wichComparision = value;

}

}

ComparisionType là kiểu liệt kê với hai giá trị, empID hay yearsOfSvc, hai giá trị này chỉ ra rằng chúng ta muốn sắp xếp theo ID hay số năm phục vụ:

public enum ComparisionType

{

EmpID,

Yrs

};

Trước khi gọi Sort(), chúng ta sẽ tạo thể hiện của EmployeeComparer và 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 chúng ta gọi Sort() thì ArrayList sẽ gọi phương thức Compare() trong Employee-Comparer, đến lượt nó sẽ ủy quyền việc so sánh cho phương thức Employee.CompareTo(),

và truyền vào thuộc tính WhichComparision của 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 một phiên bản riêng của CompareTo() để thực hiện việc so sánh:

Trang 5

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 đây là ví dụ 9.14 thể hiện đầy đủ việc thực thi IComparer để cho phép thực hiện sắp xếp theo hai tiêu chuẩn khác nhau Trong ví dụ này mảng số nguyên được xóa đi để 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 và năm công tác.

-namespace Programming_CSharp

{

using System;

using System.Collections;

//lớp đơn giản để lưu trữ trong 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();

}

Ngày đăng: 22/07/2014, 21:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm