字典和列表

时间:2013-07-03 15:38:40

标签: c# list dictionary

我想使用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中放置什么来迭代列表

5 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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});

答案 2 :(得分:0)

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

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

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

Dir[integer1].Add(integer2);

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

答案 3 :(得分:0)

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

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

var list = Dir[integer1];
list.Add(integer2);

答案 4 :(得分:0)

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

即可

(而dic是您的Dictionary<Int32, List<Int32>>

if (dic.ContainsKey(yourKey))
{
   dic[yourKey].Add(yourInt);
} else {
   dic[yourKey] = new List<int> { yourInt };
}