2010-12-29 67 views
34

Tôi biết rằng có thể chuyển đổi Danh sách KeyValuePair thành một từ điển, nhưng có cách nào nhanh chóng (ngoài việc lặp qua thủ công) để thực hiện thao tác ngược lại không?Chuyển từ điển sang danh sách <KeyValuePair>

Đây sẽ là cách sử dụng,

foreach (KeyValuePair<double,double> p in dict) 
{ 
    list.Add(new KeyValuePair<double,double>(p.Key,p.Value)); 
} 

Không thực sự là xấu, nhưng tôi chỉ là tò mò.

+2

bạn không cần phải tạo KeyValuePairs mới; điều này đơn giản hơn nhiều: 'foreach (KeyValuePair p in dict) {list.Add (p); } ' – phoog

Trả lời

79

Để chuyển đổi một Dictionary<TKey, TValue> đến một List<KeyValuePair<TKey, TValue>> bạn chỉ có thể nói

var list = dictionary.ToList(); 

hoặc tiết hơn

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>(); 

Điều này là do thực hiện Dictionary<TKey, TValue>IEnumerable<KeyValuePair<TKey, TValue>>.

+8

Có thể đáng lưu ý rằng bạn phải thêm' System.Linq; 'làm sử dụng. – Harry

+1

Điều này phải được đánh dấu là câu trả lời –

8

Sử dụng LINQ: yếu tố

myDict.ToList<KeyValuePair<double, double>>(); 

điển KeyValuePair mục.

5

Như Jason đã nói. Nhưng nếu bạn không thực sự cần một danh sách, thì bạn có thể chỉ cần đưa nó vào một ICollection < TKey, TValue > bởi vì nó thực hiện giao diện này, nhưng một số phần chỉ rõ ràng. Phương thức này hoạt động tốt hơn vì nó không sao chép toàn bộ danh sách, chỉ cần sử dụng lại cùng một cá thể từ điển.

+0

'ToList' chỉ sao chép các tham chiếu đến các mục từ điển. Đây là tốc độ cực nhanh và rất khó có thể là vấn đề hiệu suất liên quan. – jason

+2

Truyền nhanh hơn vô cùng. Điều này không đáng chú ý nếu bạn làm điều đó chỉ một vài lần với các danh sách nhỏ, nhưng vẫn còn, nó rất quan trọng. – fejesjoco

+1

@ Jason: Không đúng sự thật. Một cuộc gọi đến extensionmethod Enumerable.ToList > có khả năng tốn kém. Từ quan điểm khác, nó phải trả về một danh sách mới, nếu không bạn có thể thêm các mục vào từ điển bằng cách thêm các mục vào danh sách, điều này sẽ rất lạ. – JBSnorro

0

Đối với .NET 2.0:

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>(); 
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary); 
0

Tôi đã cố gắng liệt kê một thể hiện của Exception.Data mà là một IDictionary. Đây là những gì cuối cùng đã làm việc:

ICollection keys = idict.Keys; 
    foreach(var key in keys) 
    { 
     var value = idict[key]; 
     Console.WriteLine("{0}: {1}", key, value); 
    } 
Các vấn đề liên quan