Sự khác biệt giữa LINQ ToDictionary và ToLookup là gì? Họ dường như làm điều tương tự.
Sự khác biệt giữa LINQ ToDictionary và ToLookup là gì? Họ dường như làm điều tương tự.
Câu trả lời:
Từ điển là bản đồ 1: 1 (mỗi khóa được ánh xạ tới một giá trị duy nhất) và từ điển có thể thay đổi (có thể chỉnh sửa) sau thực tế.
Tra cứu là một bản đồ 1: nhiều (nhiều bản đồ; mỗi khóa được ánh xạ tới một IEnumerable<>
trong các giá trị với khóa đó) và không có thay đổi nào trên ILookup<,>
giao diện.
Lưu ý thêm, bạn có thể truy vấn tra cứu (thông qua trình lập chỉ mục) trên một khóa không tồn tại và bạn sẽ nhận được một chuỗi trống. Làm tương tự với từ điển và bạn sẽ nhận được một ngoại lệ.
Vậy: có bao nhiêu bản ghi chia sẻ mỗi khóa?
Một cách quá đơn giản nhìn vào nó là một Lookup<TKey,TValue>
là xấp xỉ tương đương với mộtDictionary<TKey,IEnumerable<TValue>>
ILookup<,>
hoặc là một triển khai miễn phí để ném a KeyNotFoundException
. Việc thực hiện trong Rx ném a KeyNotFoundException
.
Dictionary<TKey, IEnumerable<TValue>>
có thể được mô tả như một danh sách từ điển. Vì vậy, ToLookup()
cũng giống như nói: cho tôi một từ điển danh sách. Vì một lý do nào đó, việc nghe nó mô tả theo cách đó đã giúp tôi ghi nhớ nó ngay trong đầu.
ToDictionary là <TKey, TValue> trong khi ToLookup <TKey, T1, T2, T3, ...> tương tự như IGrouping nhưng liệt kê vẫn nằm trong bộ nhớ.
T1, T2, T3, ...
; ToLookup và ToDictionary (chính các phương thức) có khá nhiều API giống nhau