2008-10-13 45 views
63

Cách hiệu quả nhất để chuyển danh sách các giá trị của từ điển thành một mảng là gì?Chuyển đổi các giá trị từ điển thành mảng

Ví dụ, nếu tôi có một Dictionary nơi KeyStringValueFoo, tôi muốn nhận được Foo[]

Tôi đang sử dụng VS 2005, C# 2,0

Trả lời

97
// dict is Dictionary<string, Foo> 

Foo[] foos = new Foo[dict.Count]; 
dict.Values.CopyTo(foos, 0); 

// or in C# 3.0: 
var foos = dict.Values.ToArray(); 
+0

Tiện ích mở rộng .ToArray () có thực hiện tốt hơn không? – Goran

+0

nhưng làm thế nào để chúng ta biết rằng đó là hiệu quả nhất? –

+0

Tôi không thể thấy cách ToArray() có thể nhanh hơn bản sao thẳng - mà có vẻ là tối giản. –

4

Có một ToArray () trên Giá trị:

Foo[] arr = new Foo[dict.Count];  
dict.Values.CopyTo(arr, 0); 

Nhưng tôi không nghĩ rằng hiệu quả của nó ent (Tôi đã không thực sự cố gắng, nhưng tôi đoán nó sao chép tất cả các giá trị này vào mảng). Bạn có thực sự cần một Array? Nếu không, tôi sẽ cố gắng chuyển qua IEnumerable:

IEnumerable<Foo> foos = dict.Values; 
11

Lưu trữ trong danh sách. Nó dễ hơn;

List<Foo> arr = new List<Foo>(dict.Values); 

Tất nhiên, nếu bạn đặc biệt muốn nó trong một mảng;

Foo[] arr = (new List<Foo>(dict.Values)).ToArray(); 
4

Nếu bạn muốn sử dụng LINQ, vì vậy bạn có thể thử như sau:

Dictionary<string, object> dict = new Dictionary<string, object>(); 
var arr = dict.Select(z => z.Value).ToArray(); 

Tôi không biết cái nào là nhanh hơn hoặc tốt hơn. Cả hai đều làm việc cho tôi.

+2

'dict.Values.ToArray()' làm điều tương tự, nhưng không có chi phí vật chất hóa mỗi giá trị thông qua một đại biểu. – BACON

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