VieTopik
Tiếng HànTiếng AnhIT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
C# CoreDữ liệu
Bài 9/19
5 phút

Dictionary

Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Kho có hàng nghìn sản phẩm, và bạn cần biết ngay mã PEN-01 còn bao nhiêu cái. Duyệt cả list để tìm thì chậm và dài dòng. Dictionary cho phép tra thẳng bằng mã.

Khái niệm

📖 Dictionary: tập hợp các cặp khoá–giá trị, tra giá trị theo khoá, viết là Dictionary<kiểu khoá, kiểu giá trị>.

🔑 Khoá (key): giá trị dùng để tra cứu, mỗi khoá chỉ xuất hiện một lần trong dictionary.

Ví dụ

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

stock["PEN-01"] = 120;
stock["BOOK-02"] = 35;

Console.WriteLine(stock["PEN-01"]);          // 120
Console.WriteLine(stock.Count);              // 2
Console.WriteLine(stock.ContainsKey("X"));   // False

foreach (var item in stock)
{
    Console.WriteLine($"{item.Key}: {item.Value}");
}
  • Dictionary<string, int>: khoá là mã sản phẩm (string), giá trị là số lượng (int).
  • stock["PEN-01"] = 120 thêm cặp mới, hoặc ghi đè nếu khoá đã có.
  • stock["PEN-01"] đọc giá trị theo khoá.
  • ContainsKey kiểm tra khoá có tồn tại không.
  • foreach lấy ra từng cặp, đọc bằng .Key và .Value.
PEN-01 120 BOOK-02 35
Dictionary stock: mỗi khoá trỏ tới một giá trị

Thử ngay

Dán vào Program.cs rồi chạy dotnet run:

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

stock["PEN-01"] = 120;
stock["BOOK-02"] = 35;
stock["PEN-01"] = 80;

Console.WriteLine(stock.Count);
Console.WriteLine(stock["PEN-01"]);

Đoán trước khi chạy: gán PEN-01 hai lần thì dictionary có 2 hay 3 cặp?

Xem kết quả
2
80

Vẫn 2 cặp. Khoá là duy nhất, nên lần gán thứ hai chỉ ghi đè giá trị cũ của PEN-01 thành 80.

Lỗi hay gặp

Đọc khoá không tồn tại. Chương trình dừng với lỗi KeyNotFoundException.

// SAI — lỗi khi chạy: không có khoá "RULER"
Dictionary<string, int> stock =
    new Dictionary<string, int>();
stock["PEN-01"] = 120;

Console.WriteLine(stock["RULER"]);
// ĐÚNG — kiểm tra trước khi đọc
Dictionary<string, int> stock =
    new Dictionary<string, int>();
stock["PEN-01"] = 120;

if (stock.ContainsKey("RULER"))
{
    Console.WriteLine(stock["RULER"]);
}
else
{
    Console.WriteLine("Không có mã này");
}

Dùng Add với khoá đã có. Add không ghi đè mà báo lỗi ArgumentException.

// SAI — lỗi khi chạy: khoá PEN-01 đã tồn tại
Dictionary<string, int> stock =
    new Dictionary<string, int>();
stock.Add("PEN-01", 120);
stock.Add("PEN-01", 80);
// ĐÚNG — gán qua [ ] để thêm mới hoặc ghi đè
Dictionary<string, int> stock =
    new Dictionary<string, int>();
stock["PEN-01"] = 120;
stock["PEN-01"] = 80;

Tóm tắt

  • Dictionary lưu cặp khoá–giá trị và tra giá trị thẳng theo khoá.
  • Mỗi khoá là duy nhất. Gán d[key] = value sẽ thêm mới hoặc ghi đè.
  • Đọc khoá không tồn tại là lỗi, nên kiểm tra bằng ContainsKey trước.
  • foreach lấy ra từng cặp với .Key và .Value.

Tự kiểm tra

0/3 câu
Câu 1

Bạn cần tra nhanh tên khách hàng theo số điện thoại. Kiểu nào phù hợp nhất?

Câu 2

var prices = new Dictionary<string, decimal>(); prices["A"] = 10m; prices["B"] = 20m; prices["A"] = 15m; Tổng các giá trị là bao nhiêu?

Câu 3

stock["PEN"] làm chương trình dừng với KeyNotFoundException. Nguyên nhân?

Array và ListClass và object

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt