Từ điển (C # hoặc cách khác) chỉ đơn giản là một thùng chứa nơi bạn tìm kiếm một giá trị dựa trên khóa. Trong nhiều ngôn ngữ, nó được xác định chính xác hơn là Bản đồ với cách triển khai phổ biến nhất là HashMap.
Vấn đề cần xem xét là những gì xảy ra khi một khóa không tồn tại. Một số ngôn ngữ hành xử bằng cách trả lại null
hoặc nil
hoặc một số giá trị tương đương khác. Âm thầm mặc định một giá trị thay vì thông báo cho bạn rằng một giá trị không tồn tại.
Để tốt hơn hay tồi tệ hơn, các nhà thiết kế thư viện C # đã đưa ra một thành ngữ để đối phó với hành vi. Họ lập luận rằng hành vi mặc định để tìm kiếm một giá trị không tồn tại là ném ngoại lệ. Nếu bạn muốn tránh ngoại lệ, thì bạn có thể sử dụng Try
biến thể. Đó là cách tiếp cận tương tự mà họ sử dụng để phân tích chuỗi thành các số nguyên hoặc đối tượng ngày / giờ. Về cơ bản, tác động là như thế này:
T count = int.Parse("12T45"); // throws exception
if (int.TryParse("12T45", out count))
{
// Does not throw exception
}
Và điều đó đã được chuyển đến từ điển, mà người chỉ mục ủy nhiệm cho Get(index)
:
var myvalue = dict["12345"]; // throws exception
myvalue = dict.Get("12345"); // throws exception
if (dict.TryGet("12345", out myvalue))
{
// Does not throw exception
}
Đây chỉ đơn giản là cách ngôn ngữ được thiết kế.
Các out
biến có nên được khuyến khích?
C # không phải là ngôn ngữ đầu tiên có chúng và chúng có mục đích của chúng trong các tình huống cụ thể. Nếu bạn đang cố gắng xây dựng một hệ thống đồng thời cao, thì bạn không thể sử dụng out
các biến ở ranh giới đồng thời.
Theo nhiều cách, nếu có một thành ngữ được các nhà cung cấp thư viện cốt lõi và ngôn ngữ tán thành, tôi cố gắng áp dụng các thành ngữ đó trong API của mình. Điều đó làm cho API cảm thấy nhất quán hơn và ở nhà theo ngôn ngữ đó. Vì vậy, một phương thức được viết bằng Ruby sẽ không giống như một phương thức được viết bằng C #, C hoặc Python. Mỗi người trong số họ có một cách xây dựng mã ưa thích và làm việc với điều đó giúp người dùng API của bạn học nó nhanh hơn.
Bản đồ nói chung có phải là mẫu chống không?
Họ có mục đích của họ, nhưng nhiều lần họ có thể là giải pháp sai cho mục đích bạn có. Đặc biệt nếu bạn có một bản đồ hai chiều bạn cần. Có rất nhiều container và cách tổ chức dữ liệu. Có nhiều cách tiếp cận mà bạn có thể sử dụng, và đôi khi bạn cần suy nghĩ một chút trước khi chọn thùng chứa đó.
Nếu bạn có một danh sách rất ngắn các giá trị ánh xạ hai chiều, thì bạn có thể chỉ cần một danh sách các bộ dữ liệu. Hoặc một danh sách các cấu trúc, nơi bạn có thể dễ dàng tìm thấy trận đấu đầu tiên ở hai bên của ánh xạ.
Hãy nghĩ về miền vấn đề và chọn công cụ phù hợp nhất cho công việc. Nếu không có, thì hãy tạo nó.