85

将字典的值列表转换为数组的最有效方法是什么?

例如,如果我有Dictionarywhere KeyisStringValueis Foo,我想得到Foo[]

我正在使用 VS 2005,C# 2.0

4

5 回答 5

136
// 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();
于 2008-10-13T09:05:08.490 回答
17

将其存储在列表中。它更容易;

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

当然,如果你特别想要它在一个数组中;

Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
于 2012-03-29T15:20:07.320 回答
7

Values 上有一个 ToArray() 函数:

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

但我认为它效率不高(我还没有真正尝试过,但我猜它会将所有这些值复制到数组中)。你真的需要一个数组吗?如果没有,我会尝试通过 IEnumerable:

IEnumerable<Foo> foos = dict.Values;
于 2008-10-13T09:09:43.457 回答
6

如果您想使用 linq,那么您可以尝试以下操作:

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

我不知道哪个更快或更好。两者都为我工作。

于 2013-02-21T13:49:16.577 回答
2

如今,一旦有了 LINQ,就可以将字典键及其值转换为单个字符串。

您可以使用以下代码:

// 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);
于 2018-05-18T23:06:16.893 回答