簡體   English   中英

如何將IDictionary的值復制到.Net 2.0中的IList對象中?

[英]How do I Copy the Values of an IDictionary into an IList Object in .Net 2.0?

如果我有:

Dictionary<string, int>

如何將所有值復制到:

List<int> 

賓語?

解決方案需要與2.0 CLR版本和C#2.0兼容 - 除了循環遍歷字典並將值逐個添加到List對象之外,我真的沒有更好的想法。 但這感覺非常低效。

有沒有更好的辦法?

值得注意的是,您應該退后一步,問自己是否確實需要存儲在具有隨機索引訪問權限的列表中的項目,或者您是否需要不時枚舉每個鍵或值。

您可以輕松地迭代MyDictionary.Values的ICollection。

foreach (int item in dict.Values) { dosomething(item); }

否則,如果您確實需要將其存儲為IList,那么復制所有項目並不是特別低效; 這只是一個O(n)操作。 如果您不需要經常這樣做,為什么要擔心? 如果您為編寫代碼而煩惱,請使用:

IList<int> x=new List<int>(dict.Values);

它將您編寫的代碼包裝到已經實現了您計划編寫的代碼的復制構造函數中。 這是代碼效率的線,這可能是你真正關心的; 它沒有比你寫的更有空間或時間效率。

這甚至應該在2.0上工作(原諒C#3.0使用“var”):

var dict = new Dictionary<string, int>();
var list = new List<int>(dict.Values);

請嘗試以下方法

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);

如果可以使用IEnumerable<int>ICollection<int>而不是List<int> ,則只需使用字典中的Value集合而不復制任何內容。

如果需要List<int>則必須復制所有項目。 列表的構造函數可以為您完成工作,但仍然必須復制每個項目,沒有辦法解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM