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ì?
Ví dụ, nếu tôi có một Dictionary
nơi Key
là String
và Value
là Foo
, tôi muốn nhận đượcFoo[]
Tôi đang sử dụng VS 2005, C # 2.0
Câu trả lời:
// 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();
using System.Linq;
Có một hàm 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 nó hiệu quả (tôi chưa thực sự thử, 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 Mảng không? Nếu không, tôi sẽ cố gắng vượt qua IEnumerable:
IEnumerable<Foo> foos = dict.Values;
Nếu bạn muốn sử dụng linq, bạn có thể thử các bước 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 nhanh hơn hoặc tốt hơn. Cả hai đều làm việc cho tôi.
dict.Values.ToArray()
thực hiện điều tương tự, nhưng không có chi phí cụ thể hóa từng giá trị thông qua một đại biểu.
Ngày nay, khi bạn có sẵn LINQ, bạn có thể chuyển đổi các khóa từ điển và giá trị của chúng thành một chuỗi duy nhất.
Bạn có thể sử dụng mã sau:
// convert the dictionary to an array of strings
string[] strArray = dict.Select(x => ("Key: " + x.Key + ", Value: " + x.Value)).ToArray();
// convert a string array to a single string
string result = String.Join(", ", strArray);