将字典值转换为数组

Posted

技术标签:

【中文标题】将字典值转换为数组【英文标题】:Convert dictionary values into array 【发布时间】:2010-09-16 20:36:49 【问题描述】:

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

例如,如果我有一个Dictionary,其中KeyStringValueFoo,我想得到Foo[]

我正在使用 VS 2005,C# 2.0

【问题讨论】:

【参考方案1】:
// 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();

【讨论】:

扩展 .ToArray() 性能更好吗? 但是我们怎么知道它是最有效的呢? @Tom 我通常认为框架中内置的任何内容(如 .CopyTo() 或 .ToArray())都是最有效的方法。微软人比我聪明。 :) ToArray 的性能不如 CopyTo(它使用 CopyTo 复制到内部中间表示,然后再次 Copy 将其返回)。但是,与所有与微观性能相关的问题一样,要考虑可读性、稳健性和可维护性,并在出现问题时衡量性能。 ToArray() 是LINQ中的扩展方法,所以需要加上using System.Linq;【参考方案2】:

将其存储在列表中。比较容易;

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

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

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

【讨论】:

【参考方案3】:

Values 上有一个 ToArray() 函数:

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

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

IEnumerable<Foo> foos = dict.Values;

【讨论】:

【参考方案4】:

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

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

我不知道哪个更快或更好。两者都对我有用。

【讨论】:

dict.Values.ToArray() 做同样的事情,但没有通过委托实现每个值的开销。【参考方案5】:

如今,一旦有了 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);

【讨论】:

以上是关于将字典值转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

将数组转换为字典,值作为项目的索引,键作为项目本身

如何将字典转换为数组

将字典中的数组转换为数组列表

如何将嵌套字典转换为 3D 数组

将 js 数组转换为字典/哈希图

将字典数组转换为 JSON 格式