2012-05-02 34 views
9

Tôi có một từ điển có chữ ký: Dictionary<int, List<string>>. Tôi muốn chuyển đổi nó thành một Lookup với một chữ ký: Lookup<int, string>.Làm cách nào để chuyển đổi từ điển sang tra cứu?

tôi đã cố gắng:

Lookup<int, string> loginGroups = mapADToRole.ToLookup(ad => ad.Value, ad => ad.Key); 

Nhưng đó không phải đang làm việc rất tốt.

Trả lời

17

Bạn có thể sử dụng:

var lookup = dictionary.SelectMany(p => p.Value 
             .Select(x => new { p.Key, Value = x})) 
         .ToLookup(pair => pair.Key, pair => pair.Value); 

(Bạn có thể sử dụng KeyValuePair thay vì một loại vô danh - Tôi chủ yếu không vì lý do định dạng.)

Nó khá xấu xí, nhưng nó sẽ làm việc. Bạn có thể thay thế bất kỳ mã nào đã tạo từ điển để bắt đầu không? Điều đó có lẽ sẽ sạch hơn.

+0

Tôi nghĩ bạn có nghĩa là: 'Chọn (x => mới {Key = p.Key, Giá trị = x})' –

+0

@SaeedAmiri: Không, ý tôi là những gì tôi đã viết. Nó sẽ hoạt động tốt như vậy - tên thuộc tính 'Key' được suy ra. –

+0

Đẹp Tôi chưa bao giờ thử nó :) –

Các vấn đề liên quan