如何将字典的值复制到 .Net 2.0 中的 IList 对象中?
Posted
技术标签:
【中文标题】如何将字典的值复制到 .Net 2.0 中的 IList 对象中?【英文标题】:How do I Copy the Values of an IDictionary into an IList Object in .Net 2.0? 【发布时间】:2009-04-21 01:57:42 【问题描述】:如果我有:
Dictionary<string, int>
如何将所有值复制到:
List<int>
对象?
该解决方案需要与 2.0 CLR 版本和 C# 2.0 兼容——我真的没有更好的主意,除了循环遍历字典并将值一个接一个地添加到 List 对象中。但这感觉非常低效。
有没有更好的办法?
【问题讨论】:
【参考方案1】:可能值得注意的是,您应该退后一步,问问自己是否真的需要存储在具有随机索引访问的列表中的项目,或者您是否只需要不时枚举每个键或值。
您可以轻松地遍历 MyDictionary.Values 的 ICollection。
foreach (int item in dict.Values) dosomething(item);
否则,如果您确实需要将其存储为 IList,那么复制所有项目并没有什么特别低效的;这只是一个 O(n) 操作。如果您不需要经常这样做,何必担心呢?如果您对编写代码感到恼火,请使用:
IList<int> x=new List<int>(dict.Values);
它将您要编写的代码包装到一个复制构造函数中,该构造函数已经实现了您计划编写的代码。那是代码行效率,这可能是您真正关心的;它并不比你写的更节省空间或时间。
【讨论】:
【参考方案2】:即使在 2.0 上也应该可以工作(请原谅 C# 3.0 使用“var”):
var dict = new Dictionary<string, int>();
var list = new List<int>(dict.Values);
【讨论】:
【参考方案3】:试试下面的
public static class Util
public List<TValue> CopyValues<TKey,TValue>(Dictionary<TKey,TValue> map)
return new List<TValue>(map.Values);
然后你可以使用如下方法
Dictionary<string,int> map = GetTheDictionary();
List<int> values = Util.CopyValues(map);
【讨论】:
IIRC C# 2.0 无法推断通用类型,因此您必须在调用中指定它们:Util.CopyValues如果您可以使用IEnumerable<int>
或ICollection<int>
而不是List<int>
,您可以直接使用字典中的Value
集合,而无需复制任何内容。
如果您需要List<int>
,则必须复制所有项目。列表的构造函数可以为你完成工作,但每个项目仍然需要复制,没有办法。
【讨论】:
以上是关于如何将字典的值复制到 .Net 2.0 中的 IList 对象中?的主要内容,如果未能解决你的问题,请参考以下文章
使用asp.net 2.0中的SqlBulkCopy类批量复制数据