C# - C Sharp: Dictionary generic
Giải phóng thời gian, khai phóng năng lực
Tổng quan
Namespace System.Collections.Generic chứa một số lượng lớn các tập hợp generic, một trong những tập hợp phổ biến nhất là lớp Dictionary generic, lớp này chứa một tập hợp các phần tử generic được tổ chức thành các cặp key/value, thông qua mỗi key ta sẽ lấy được value tương ứng. Không giống như namespace System.Collections, Dictionary generic được dùng để tạo một tập hợp các dữ liệu cùng kiểu và kiểu do người dùng quyết định. Mỗi phần tử ta thêm vào đều sẽ bao gồm một value và một key tương ứng, và ta có thể truy xuất value thông qua key tương ứng đó.
Lớp Dictionary generic không cho phép chứa phần tử có key là null.
Lớp Dictionary generic thuộc namespace: System.Collections.Generic .
Lớp Dictionary generic có các thuộc tính và phương thức cho phép ta thêm cũng như thao tác với các phần tử trong tập hợp.
Cú pháp khai báo Dictionary generic
, trong đó, TKey và TValue lần lượt là kiểu của key và value sẽ được lưu vào Dictionary generic. Điểu này có nghĩa bạn chỉ có thể thêm được các phần tử có key và value tương ứng cùng kiểu đã được chỉ ra.
Ví dụ:
Các phương thức của lớp Dictionary generic:
1. Add()
Thêm một phần tử với key và value cụ thể vào tập hợp. Ví dụ:
2. Remove()
Xoá một phần tử có key tương ứng với đối số của phương thức khỏi dictionary. Ví dụ:
3. ContainsKey()
Kiểm tra xem key tương ứng với đối số của phương thức có nằm trong dictionary hay không. Ví dụ:
4. ContainsValue()
Kiểm tra xem value tương ứng với đối số của phương thức có nằm trong dictionary hay không. Ví dụ:
5. GetEnumerator()
Phương thức này sẽ trả về bộ liệt kê interface IDictionaryEnumerator thông qua các phần tử của dictionary và bạn có thể dùng để liệt kê (iterate) các phần tử trong danh sách. Ví dụ:
6. GetType()
Phương thức này dùng để lấy kiểu của thể hiện hiện thời. Ví dụ:
Kết quả thực thi câu lệnh trên là như sau:
Các thuộc tính của Dictionary generic
1. Count
Thuộc tính này dùng để lấy tổng số cặp key/value trong System.Collections.Generic.Dictionary<TKey, TValue>. Ví dụ:
2. Item
Đây là thuộc tính mặc định, thuộc tính này dùng để lấy value hoặc gán value mới cho phần tử có key được chỉ ra. Ví dụ:
Trong ví dụ trên , nếu key = 65 (trong cặp ngoặc vuông) tồn tại thì thuộc tính mặc định Item sẽ được gọi tới và nó sẽ lấy value tương ứng với key để hiển thị, sau đó Item sẽ gán value ứng với key = 65 thành "Bo luu tru du lieu" rồi hiển thị lại.
3. Keys
Cũng giống như Hashtable hay SortedList, thuộc tính Keys của Dictionary generic như là mảng một chiều và nó chứa các key của danh sách, Keys có thuộc tính Count dùng để lấy số lượng key; Keys cũng có một số phương thức riêng của nó như CopyTo() dùng để copy các value tới một mảng khác, phương thức GetType() dùng để lấy kiểu của Keys, ... Ví dụ:
4. Values
Thuộc tính Values là một mảng đơn chứa các value của danh sách, và Values cũng có những thuộc tính và phương thức với ý nghĩa tương tự như thuộc tính Keys. Ví dụ:
Ví dụ về Dictionary generic
Ví dụ 1:
using System; using System.Collections; using System.Collections.Generic; namespace Demo { class DictionaryCollection { static void Main(string[] args) { Dictionary<int, string> objDictionary = new Dictionary<int, string>(); objDictionary.Add(25, "Hard Disk"); objDictionary.Add(30, "Processor"); objDictionary.Add(15, "MotherBoard"); objDictionary.Add(65, "Memory"); ICollection objCollect = objDictionary.Keys; Console.WriteLine("Original values stored in the collection"); Console.WriteLine("Keys \t Values"); Console.WriteLine("----------------"); foreach (int i in objCollect) { Console.WriteLine(i + " \t " + objDictionary[i]); } objDictionary.Remove(65); Console.WriteLine(); if (objDictionary.ContainsValue("Memory")) { Console.WriteLine("Value Memory could not be deleted"); } else { Console.WriteLine("Value Memory deleted successfully"); } Console.WriteLine(); Console.WriteLine("Values stored after removing element"); Console.WriteLine("Keys \t Values"); Console.WriteLine("----------------"); foreach (int i in objCollect) { Console.WriteLine(i + " \t " + objDictionary[i]); } } } }
Trong ví dụ trên, lớp Dictionary tạo một thể hiện với tên objDictionary gồm hai tham số kiểu int và string, trong đó kiểu int sẽ là kiểu của key của phần tử sẽ được chèn vào và kiểu string sẽ là kiểu của value của phần tử; phương thức Add() sẽ chèn phần tử theo cặp key/value vào thể hiện objDictionary; thuộc tính Keys chứa danh sách các key của thể hiện objDictionary và nó cung cấp danh sách các key đó cho thể hiện objCollect của của interface ICollection; interface ICollection xác định kích thước và đồng bộ hóa các phương thức để thao tác với các key; phương thức Remove() sẽ xóa phần tử có value = "Memory" thông qua key = 65; phương thức ContainsValue() sẽ kiểm tra xem value "Memory" có tồn tại trong thể hiện objDictionary hay không và đưa ra thông báo thích hợp. Hình dưới đây thể hiện kết quả của ví dụ:
Ví dụ 2:
using System; using System.Collections; using System.Collections.Generic; namespace Demo { class Car { static void Main(string[] args) { Dictionary<int, string> objDictionary = new Dictionary<int, string>(); objDictionary.Add(201, "Gear Box"); objDictionary.Add(220, "Oil Filter"); objDictionary.Add(330, "Engine"); objDictionary.Add(305, "Radiator"); objDictionary.Add(303, "Steering"); Console.WriteLine("Dictionary class contains values of type"); Console.WriteLine(objDictionary.GetType()); Console.WriteLine("Keys \t\t Values"); Console.WriteLine("__________________________"); IDictionaryEnumerator objDictionayEnumerator = objDictionary.GetEnumerator(); while (objDictionayEnumerator.MoveNext()) { Console.WriteLine(objDictionayEnumerator.Key.ToString() + "\t\t" + objDictionayEnumerator.Value); } } } }
Trong ví dụ trên, phương thức GetEnumerator() của objDictionary sẽ trả về một enumerator là một tập hợp các phần tử của objDictionary cho thể hiện objDictionayEnumerator của interface IDictionaryEnumerator, sau đó thông qua vòng lặp while kết hợp với phương thức MoveNext() của thể hiện objDictionayEnumerator để hiện thị các phần tử với cặp key/value tương ứng. Kết quả của ví dụ:
Giải phóng thời gian, khai phóng năng lực