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 p10 pps

5 479 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 907,1 KB

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

Nội dung

Values Thuộc tính trả về một ICollection chứa những giá trị trong hashtable.. Việc thực thi thông thường của phương thức GetHashCode đối với chuỗi thì đơn giản bằng cách cộng các giá trị

Trang 1

Keys Thuộc tính trả về một ICollection chứa những khóa

trong hashtable

Values Thuộc tính trả về một ICollection chứa những giá

trị trong hashtable

định

Clear() Xóa tất cả đối tượng trong hashtable

Contains() Xác định xem một thành phần có trong hashtable

ContainsKey() Xác định xem hashtable có chứa một khóa xác

định

CopyTo() Sao chép những thành phần của hashtable đến

mảng một chiều đã tồn tại

GetEnumerator() Trả về một enumerator cho hashtable

GetObjectData() Thực thi ISerializable và trả về dữ liệu cần thiết để

lưu trữ

OnDeserialization Thực thi ISerializable và phát sinh sự kiện

deserialization khi hoàn thành

Bảng 9.6: Phương thức và thuộc tính của lớp Hashtable.

Trong một Hashtable, mỗi giá trị được lưu trữ trong một vùng Mỗi vùng được đánh số tương

tự như là từng offset trong mảng Do khóa có thể không phải là số nguyên, nên phải chuyển các khóa thành các khóa số để ánh xạ đến vùng giá trị được đánh số Mỗi khóa phải cung cấp phương thức GetHashCode() để nhận giá trị mã hóa thành số của nó Chúng ta nhớ rằng mọi thứ trong C# đều được dẫn xuất từ lớp object Lớp object cung cấp một phương thức ảo là

GetHashCode(), cho phép các lớp dẫn xuất tự do kế thừa hay viết lại Việc thực thi thông thường của phương thức GetHashCode() đối với chuỗi thì đơn giản bằng cách cộng các giá trị Unicode của từng ký tự lại rồi sau đó sử dụng toán tử chia lấy dư để nhận lại một giá trị từ

0 đến số vùng được phân của hashtable Ta không cần phải viết lại phương thức này với kiểu chuỗi

Khi chúng ta thêm giá trị vào Hashtable thì Hashtable sẽ gọi phương thức GetHashCode()

cho mỗi giá trị mà chúng ta cung cấp Phương thức này trả về một số nguyên, xác định vùng

mà giá trị được lưu trữ trong hashtable.Dĩ nhiên là có thể nhiều giá trị nhận chung một khóa tức là cùng một vùng trong hashtable, điều này gọi là sự xung đột Có một vài cách để giải quyết sự xung đột này Trong đó cách chung nhất và được hỗ trợ bởi CLR là cho mỗi vùng duy trì một danh sách có thứ tự các giá trị Khi chúng ta truy cập một giá trị trong hashtable, chúng ta cung cấp một khóa Một lần nữa gọi phương thức trên

Trang 2

khóa và sử dụng giá trị trả về để tìm vùng tương ứng Nếu chỉ có một giá trị thì nó sẽ trả về, nếu có nhiều hơn hai giá trị thì việc tìm kiếm nhị phân sẽ được thực hiện trên những nội dung của vùng đó Bởi vì có một vài giá trị nên việc tìm kiếm này thực hiện thông thường là rất nhanh

Khóa trong Hashtable có thể là kiểu dữ liệu nguyên thủy hay là các thể hiện của các kiểu dữ liệu do người dùng định nghĩa (các lớp cho người lập trình tạo ra) Những đối tượng được sử dụng làm khóa trong hashtable phải thực thi GetHashCode() và Equals() Trong hầu hết trường hợp, chúng ta có thể sử dụng kế thừa từ Object

Giao diện IDictionary

Hashtable là một từ điển ví nó thực thi giao diện IDictionary IDictionary cung cấp một thuộc tính public là Item Thuộc tính Item truy cập một giá trị thông qua một khóa xác định Trong ngôn ngữ C# thuộc tính Item được khai báo như sau:

object this[object key]

{ get; set;}

Thuộc tính Item được thực thi trong ngôn ngữ C# với toán tử chỉ mục ([]) Do vậy chúng ta

có thể truy cập những item trong bất cứ đối tượng từ điển bằng cú pháp giống như truy cập mảng

Ví dụ 9.17 minh họa việc thêm một item vào trong bảng Hashtable và sau đó truy cập lại chúng thông qua thuộc tính Item

Ví dụ 9.17: thuộc tính Item tương như như toán tử offset.

-namespace Programming_CSharp

{

using System;

using System.Collections;

public class Tester

{

static void Main()

{

// tạo và khởi tạo hashtable Hashtable hashTable = new Hashtable();

hashTable.Add(“00440123”,”Ngoc Thao”);

hashTable.Add(“00123001”,”My Tien”);

hashTable.Add(“00330124”,”Thanh Tung”);

// truy cập qua thuộc tính Item Console.WriteLine(“myHashtable[\“00440123\”]: {0}”, hashTable[“00440123”]);

Trang 3

}

}

- Kết quả:

hashTable[“00440123”]: Ngoc Thao

-Ví dụ 9.17 bắt đầu bằng việc tạo một bảng Hashtable mới, sử dụng các giá trị mặc định của dung lượng, phương thức tạo mã băm và phương tức so sánh Tiếp sau là việc thêm 3 bộ giá trị vào theo thứ tự khóa/giá trị Sau khi các item đã được thêm vào chúng ta có thể lấy giá trị thông qua khóa với cách thức dùng toán tử offset

Tập khóa và tập giá trị

Các kiểu từ cung cấp thêm hai thuộc tính là thuộc tính Keys, và thuộc tính Values Trong

đó Keys truy cập đối tượng ICollection với tất cả những khóa trong Hashtable, và Values truy cập đối tượng ICollection với tất cả giá trị Ví dụ 9.18 minh họa như sau

Ví dụ 9.18 Tập khóa và tập giá trị.

-namespace Progrmming_CSharp

{

using System;

using System.Collections;

public class Tester

{

static void Main()

{

// tạo và khởi tạo hashtable Hashtable hashTable = new Hashtable();

hashTable.Add(“00440123”,”Ngoc Thao”);

hashTable.Add(“00123001”,”My Tien”);

hashTable.Add(“00330124”,”Thanh Tung”);

// nhận tập khóa ICollection keys = hashTable.Keys;

// nhập tập giá trị ICollection values = hashTable.Values;

// xuất tập khóa foreach( string s in keys) {

Trang 4

Console.WriteLine(“{0}”, s);

} // xuất tập giá trị foreach( string s in values) {

Console.WriteLine(“{0}”, s);

} }

}

}

- Kết quả:

00123001

00440123

00330124

My Tien

Ngoc Thao

Thanh Tung

-Mặc dù thứ tự của keys không được đảm bảo theo thứ tự nhưng chúng đảm bảo rằng cùng với thứ tự đưa ra của giá trị Như chúng ta thấy trên khóa 00123001 tương ứng với My Tien,

Giao diện IDictionaryEnumerator

Những đối tượng IDictionary cũng hỗ trợ vòng lặp foreach bằng việc thực thi phương thức GetEnumerator(), phương thức này trả về một IDictionaryEnumerator

IDictionaryEnumerator được sử dụng để liệt kê bất cứ đối tượng IDictionary nào Nó cung cấp thuộc tính để truy cập cả khóa và giá trị cho mỗi thành phần trong từ điển Ta có ví dụ 9.19 minh họa như sau:

Ví dụ 9.16: sử dụng giao diện IDictionaryEnumerator.

-namespace Progrmming_CSharp

{

using System;

using System.Collections;

public class Tester

{

static void Main()

{

Trang 5

// tạo và khởi tạo hashtable Hashtable hashTable = new Hashtable();

hashTable.Add(“00440123”,”Ngoc Thao”);

hashTable.Add(“00123001”,”My Tien”);

hashTable.Add(“00330124”,”Thanh Tung”);

Console.WriteLine(“hashTable”);

Console.WriteLine(“Count: {0}”,hashTable.Count);

Console.WriteLine(“Keys and Values:”);

Print( hashTable );

}

public static void Print(Hashtable table)

{

IDictionaryEnumerator enumerator = table.GetEnumerator();

while ( enumerator.MoveNext() ) {

Console.WriteLine(“\t{0}:\t{1}”, enumerator.Key, enumerator.Value);

} Console.WriteLine();

}

}

}

- Kết quả:

hashTableg

Count: 3

Keys and Values:

00123001: My Tien

00440123: Ngoc Thao

00330124: Thanh Tung

-Câu hỏi và trả lời

Câu hỏi 1: Điều phân biệt giữa mảng và các thành phần bên trong một mảng?

Trả lời 1: Mảng là kiểu dữ liệu tham chiếu, còn các thành phần bên trong mảng được cấp phát dựa theo kiểu dữ liệu của chúng Do vậy một mảng của kiểu dữ liệu tham chiếu sẽ không chứa giá trị gì cả mà chỉ tham chiếu đến những thành phần được tạo ra trên heap Câu hỏi 2: Một lớp có bộ chỉ mục khác một mảng như thế nào?

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

HÌNH ẢNH LIÊN QUAN

Bảng 9.6: Phương thức và thuộc tính của lớp Hashtable. - 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 p10 pps
Bảng 9.6 Phương thức và thuộc tính của lớp Hashtable (Trang 1)

TỪ KHÓA LIÊN QUAN

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