C# - C Sharp: Dictionary generic

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
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

Dictionary<TKey, TValue> dictionary_name = new Dictionary<TKey, TValue>();

, 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ụ:

Dictionary<int, string> objDictionary = new Dictionary<int,string>();

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ụ:

objDictionary.Add(25, "O dia cung");
objDictionary.Add(30, "Bo xu ly");
objDictionary.Add(15, "Bo mach chu");
objDictionary.Add(65, "Bo nho");

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ụ:

objDictionary.Remove(65);

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ụ:

if(objDictionary.ContainsKey(65))
{
  Console.WriteLine("65: " + objDictionary[65]);
}
else
{
  Console.WriteLine("Khong chua");
}

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ụ:

if (objDictionary.ContainsValue("Bo nho"))
{
  Console.WriteLine("Yes");
}
else
{
  Console.WriteLine("No");
}

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ụ:

IDictionaryEnumerator objDictionayEnumerator = objDictionary.GetEnumerator();

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ụ:

Console.WriteLine(objDictionary.GetType());

Kết quả thực thi câu lệnh trên là như sau:

System.Collections.Generic.Dictionary`2[System.Int32,System.String]

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ụ:

Console.WriteLine(objDictionary.Count);

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ụ:

if (objDictionary.ContainsKey(65))
{
  Console.WriteLine("Gia tri cua key 65: " + objDictionary[65]);
  objDictionary[65] = "Bo luu tru du lieu";
  Console.WriteLine("Sau khi cap nhat, gia tri cua key 65 la: " + objDictionary[65]);
}

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ụ:

foreach (object key in objDictionary.Keys)
{
  Console.WriteLine(key);
}

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ụ:

foreach (object value in objDictionary.Values)
{
  Console.WriteLine(value);
}

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ụ:

dictionary-generic-example1

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ụ:

dictionary-generic-example2

» Tiếp: Generic
« Trước: SortedList
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!