在.NET中如何创建一个字典列表?

19

我正在尝试创建一个Dictionary<string,int>项目列表。我不确定如何在列表中添加项目以及如何在遍历列表时获取值。我想在C#中使用它,像这样:

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

1
代码示例和语言标签 - James Kyburz
我想在C#中使用它,类似于:public List<Dictionary<string,int>> MyList= new List<Dictionary<string,int>>(); - Vivek
从字典中检索项目时,顺序是否很重要?如果您只想将所有字典项文字直接放入列表中,则可以查看LINQ,并且可以轻松实现此操作。 - tomahawk
你能给出一个如何填充和使用列表的例子吗?告诉我们如何实例化该列表并不足够详细。 - Matt Ellen
4个回答

39

过去的5年发生了很多变化......现在你可以做到以下几点:

ListDictionary list = new ListDictionary();
list.Add("Hello", "Test1");
list.Add("Hello", "Test2");
list.Add("Hello", "Test3");

享受!


2
没听说过这个!太棒了!非常感谢 :) - IfElseTryCatch
5
使用 System.Collections.Specialized; - Gary Bao 鲍昱彤
1
这绝对不是问题的答案。@Vivek要求字典列表,而你提供的只是一个简单的字典,甚至不是列表字典,与名称所暗示的相反。它只是一个专门用于小集合优化的IDictionary的具体实现。您应该同时阅读要回答的问题和使用的对象的文档(https://learn.microsoft.com/en-us/dotnet/api/system.collections.specialized.listdictionary?view=net-7.0)。 - adamency

32

我认为这就是你所寻找的内容?

{
    MyList.Add(new Dictionary<string,int>()); // "Dictionary 1"
    MyList.Add(new Dictionary<string,int>()); // "Dictionary 2"
    MyList[0].Add("Dictionary 1", 1);
    MyList[0].Add("Dictionary 1", 2);
    MyList[1].Add("Dictionary 2", 3);
    MyList[1].Add("Dictionary 2", 4);
    foreach (var dictionary in MyList)
        foreach (var keyValue in dictionary)
            Console.WriteLine(string.Format("{0} {1}", keyValue.Key, keyValue.Value));
}

10
如果你对某人的回答感到满意,就应该接受它。欢迎来到 Stack Overflow! - Jaapjan

4

我认为你需要知道在哪个字典中添加新值。因此,列表是问题所在。你无法识别其中的字典。

我的解决方案是创建一个字典集合类。它可以像这样:

  public class DictionaryCollection<TType> : Dictionary<string,Dictionary<string,TType>> {
    public void Add(string dictionaryKey,string key, TType value) {

        if(!ContainsKey(dictionaryKey))
            Add(dictionaryKey,new Dictionary<string, TType>());

        this[dictionaryKey].Add(key,value);
    }

    public TType Get(string dictionaryKey,string key) {
        return this[dictionaryKey][key];
    }
}

那么你可以像这样使用它:
var dictionaryCollection = new DictionaryCollection<int>
                                       {
                                           {"dic1", "Key1", 1},
                                           {"dic1", "Key2", 2},
                                           {"dic1", "Key3", 3},
                                           {"dic2", "Key1", 1}
                                       };

2
   // Try KeyValuePair Please.. Worked for me


    private List<KeyValuePair<string, int>> return_list_of_dictionary()
    {

        List<KeyValuePair<string, int>> _list = new List<KeyValuePair<string, int>>();

        Dictionary<string, int> _dictonary = new Dictionary<string, int>()
        {
            {"Key1",1},
            {"Key2",2},
            {"Key3",3},
        };



        foreach (KeyValuePair<string, int> i in _dictonary)
        {
            _list.Add(i);
        }

        return _list;

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接