Dictionary
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 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"] = 120thêm cặp mới, hoặc ghi đè nếu khoá đã có.stock["PEN-01"]đọc giá trị theo khoá.ContainsKeykiểm tra khoá có tồn tại không.foreachlấy ra từng cặp, đọc bằng.Keyvà.Value.
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
80Vẫ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] = valuesẽ 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
ContainsKeytrước. foreachlấy ra từng cặp với.Keyvà.Value.
Tự kiểm tra
0/3 câuBạ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?
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?
stock["PEN"] làm chương trình dừng với KeyNotFoundException. Nguyên nhân?