2010-05-26 37 views
5

Tôi có một từ điển với các giá trị không duy nhất và tôi muốn đếm các kết quả trùng khớp của một chuỗi so với các giá trị. Về cơ bản tôi bây giờ làm dict.ContainsValue (a) để có được một bool nói với tôi nếu chuỗi tồn tại trong dict, nhưng tôi muốn biết không chỉ nếu nó tồn tại nhưng bao nhiêu lần nó tồn tại (và maybee thậm chí có được một danh sách các phím nó tồn tại ràng buộc)Trả lại số kết quả phù hợp từ C# dictionary

Có cách nào để thực hiện việc này bằng từ điển hay tôi nên tìm một bộ sưu tập khác?

/Rickard Haake

+1

Bạn đang sử dụng phiên bản khung nào? –

+0

4.0 để cách tiếp cận liên kết từ Simon Steele hoàn hảo. –

Trả lời

9

Để có được số lượng các trường hợp của các giá trị mà bạn có thể làm một cái gì đó như thế này:

dict.Values.Count(v => v == a); 

Để tìm các phím có giá trị này, bạn có thể làm điều này:

dict.Where(kv => kv.Value == a).Select(kv => kv.Key); 
+0

Cảm ơn, đó là hoàn hảo –

4

Để có được Values.Count sử dụng count:

int count = dict.Values.Count(x => x == "foo"); 

Để có được các phím tôi thích cú pháp truy vấn:

var keys = from kvp in dict 
      where kvp.Value == "foo" 
      select kvp.Key; 

Lưu ý rằng điều này sẽ đòi hỏi quét toàn bộ từ điển. Đối với các từ điển nhỏ hoặc tra cứu không thường xuyên, điều này có thể không phải là một vấn đề.

Nếu bạn đang thực hiện nhiều lần tra cứu, bạn có thể muốn duy trì một từ điển thứ hai ánh xạ các giá trị cho khóa. Trong khi điều này sẽ tăng tốc độ tra cứu, nó sẽ làm chậm sửa đổi vì cả hai bộ từ điển sẽ cần cập nhật cho mỗi thay đổi.

+0

Cảm ơn, đó là câu trả lời hay. –

1

gì về việc sử dụng LINQ: nếu a là giá trị bạn đang tìm kiếm, mã có thể là

dict.Values.Where(v => v == a).Count(); 
Các vấn đề liên quan