如何初始化多个列表 通过使用给定的名称列表

问题描述 投票:1回答:3

是否有一个函数可以用来使用给定的名称列表初始化多列表?例如:

List<string> nw_TCList = new List<string>();
List<string> ia_TCList = new List<string>();
List<string> st_TCList = new List<string>();
List<string> ud_TCList = new List<string>();
List<string> mb_TCList = new List<string>();

我想创建那些List,现在我有一个List包含这些名称:

List<string> myNameList = new List<string>() 
{
    "nw_TCList", 
    "ia_TCList", 
    "st_TCList", 
    "ud_TCList", 
    "mb_TCList" 
};

我想做这样的事情:

for (int i = 0; i < myNameList.Count(); i++)
{
   List<string> myNameList[i] = new List<string>();
}

此外,假设我有一个字典myDic<sting,List<string>>,我有一个密钥列表List<string> myKeys和我刚刚创建的许多List<string>。我想将它们添加到字典中,如下所示:

myDic.Add(myKeys[0], nw_TCList);
myDic.Add(myKeys[1], ia_TCList);
myDic.Add(myKeys[2], st_TCList);
myDic.Add(myKeys[3], ud_TCList);
myDic.Add(myKeys[4], mb_TCList);

有没有简单的方法来完成这项工作?非常感谢。

c# string list dictionary
3个回答
2
投票

你可以摆脱所有额外声明的列表并在字典中收集它们。如果您已将列表中的所有名称都用作键,则可以使用ToDictionary方法创建包含空列表和相应键的字典:

List<string> myNameList = new List<string>() 
{
    "nw_TCList", 
    "ia_TCList", 
    "st_TCList", 
    "ud_TCList", 
    "mb_TCList" 
};

Dictionary<string, List<string>> myDictionary = myNameList.ToDictionary
       (
           key => key, // this means that the current element in myNameList will serve as the key
           value => new List<string>() // this means that for the current element in myNameList a new List<string> will be created as the value
       );

现在,您可以通过以下方式访问列表:

List<string> nw_TCList = myDictionary[myNameList[0]];

编辑:

一个更强大的方法是使用enum作为名称。这样你就可以让编译器检查拼写了。声明一个枚举:

public enum ListNames
{
    nw_TCList,
    ia_TCList,
    st_TCList,
    ud_TCList,
    mb_TCList
}

现在使用它作为字典中的键。现在字典的构造看起来有点不同。您可以使用Enum.GetValue方法获取枚举的所有值。

Dictionary<ListNames, List<string>> myDictionaryRobust = Enum.GetValues(typeof(ListNames))
                             .Cast<ListNames>()
                             .ToDictionary(key => key, value => new List<string>());

使用这种方法,下次你想,你需要更多这些列表,只需扩展你的枚举,字典将自动填充额外的列表和正确的名称!


3
投票

您可以遍历名称并相应地向字典添加条目:

foreach(var name in new []{ "list", "names", "here" })
{
  myDic[name] = new List<string>();
}

0
投票

它与foreach相同,但在一行中

var myDic = new Dictionary<string,List<string>>()
List<string> myKeys = new List<string>() { "1", "2", "3"};
myKeys.ForEach(l => myDic.Add(l, new List<string>));
© www.soinside.com 2019 - 2024. All rights reserved.