创建每个键具有多个值的键/值列表

时间:2012-02-14 07:44:42

标签: c# .net linq collections

我需要一个键/值列表,每个键有多个值!

我尝试了什么:

SortedList<string,List<int>> MyList = new SortedList<string,List<int>>();    

但问题是我无法动态地在SortedList中为List添加值?

foreach(var item in MyData)  { MyList.Add(item.Key,item.Value ????); }

我该如何解决这个问题?是否已经有一个具有此功能的列表?

此致 rubiktubik

3 个答案:

答案 0 :(得分:2)

查看Lookup(Of TKey, TElement)课程,

  

表示每个映射到一个或多个值的键集合。

答案 1 :(得分:2)

补充Kirill关于使用Lookup的有效建议:

var lookup = MyData.ToLookup(item => item.Key);

然后

foreach (var entry in lookup)
{
  string key = entry.Key;
  IEnumerable<int> items = entry;

  foreach (int value in items)
  {
    ...
  }      
}

答案 2 :(得分:0)

除了ILookup之外,您还可以使用Dictionary<string,List<int>>。 添加/设置项目时,您应该检查是否有该列表的列表:

Dictionary<string,List<int>> MyList;
void AddItem(string key, int value){
List<int> values;
if(!MyList.TryGet(key, values)){
values= new List<int>();
MyList.Add(key, values);
}
values.Add(value);
}

迭代这些项目是:

foreach (var entry in MyList)
{
string key = entry.Key;
List<int> values = entry.Value;
}

如果某个键的值应该唯一而不是一个List,则可以使用HashSet