1

我想在 c# 中使用字典并结合这样的列表

Dictionary<int, List<int>> Dir = new Dictionary<int, List<int>>();

但我在添加键和值的语法上遇到了问题。我想如果我只是做了类似的事情

Dir.Add(integer1, integer2);

它会添加 integer1 是键, integer2 作为值。然后,如果我想添加到 integer1 键,我会做

Dir.Add[interger1].Add(interger3);

我还有一个问题,我有一个这样的 foreach 循环来显示键

 foreach (KeyValuePair<int, List<int>> k in labelsList)
 {
     Console.WriteLine(k.Key + " "+ k.Value);
 }

它显示我预计最多 7 个的键,但它不显示我希望它显示的值,它只是显示

1 System.Collections.Generic.List`1[System.Int32]

2 System.Collections.Generic.List`1[System.Int32]

3 System.Collections.Generic.List`1[System.Int32]

4 System.Collections.Generic.List`1[System.Int32]

5 System.Collections.Generic.List`1[System.Int32]

6 System.Collections.Generic.List`1[System.Int32]

7 System.Collections.Generic.List`1[System.Int32]

我有任何想法使用嵌套的 foreach 之类的

foreach (KeyValuePair<int, List<int>> k in labelsList)
{
     foreach (KeyValuePair<int, List<int>> k in labelsList)
     {
         Console.WriteLine(k.Key + " " + k.Value);
     }
}

但我不确定在嵌套的 foreach 中放置什么来遍历列表

4

5 回答 5

2

您必须先将集合添加到字典中,然后才能开始向其添加值。这是一个进行一次查找的解决方案(相比之下,如果ContainsKey使用了两次)。如果列表丢失,它还会添加列表。

public class YourClass
{
    private Dictionary<int, List<int>> _dictionary = new Dictionary<int, List<int>>();

    public void AddItem(int key, int value)
    {
        List<int> values;
        if (!_dictionary.TryGetValue(key, out values))
        {
            values = new List<int>();
            _dictionary.Add(key, values);
        }

        values.Add(value);
    }

    public IEnumerable<int> GetValues(int key)
    {
        List<int> values;
        if (!_dictionary.TryGetValue(key, out values))
        {
            return new int[0];
        }

        return values;
    }
}
于 2013-07-03T15:42:23.347 回答
1

当你调用时Dir.Add(),你需要提供一个对象的引用。提供一个本身是不对的。所以你需要这样的东西:List<int> int

Dir.Add(integer1, new List<int>());

然后您可以像这样更新该条目:

Dir[integer1].Add(integer2);
Dir[integer1].Add(integer3);

或者,您可以使用集合初始值设定项语法:

Dir.Add(integer1, new List<int> { integer2, integer3});
于 2013-07-03T15:43:38.717 回答
0

首先,为您的 key 创建一个条目integer1,除非您已经这样做了:

Dir.Add(integer1, new List<int>());

然后,找到正确的字典条目,然后添加到它的值(在本例中为您的列表):

Dir[integer1].Add(integer2);

如果您正在寻找其他答案,您将在其他答案中找到更多完整的代码片段。

于 2013-07-03T15:39:43.417 回答
0

您需要添加一个List<int>as 值。它会像这样工作:

if (!Dir.ContainsKey(integer1)) {
  Dir.Add(integer1, new List<int>());
}

var list = Dir[integer1];
list.Add(integer2);
于 2013-07-03T15:43:52.117 回答
0

如果要添加项目,只需使用此代码

(而dic你的Dictionary<Int32, List<Int32>>

if (dic.ContainsKey(yourKey))
{
   dic[yourKey].Add(yourInt);
} else {
   dic[yourKey] = new List<int> { yourInt };
}
于 2013-07-03T16:06:37.673 回答