【问题标题】:How to initialize Multiple List<string> by using a given name List<string>如何使用给定名称 List<string> 初始化多个 List<string>
【发布时间】:2018-09-06 08:50:09
【问题描述】:

有没有我可以使用给定名称列表初始化多个列表的函数? 例如:

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<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&lt;sting,List&lt;string&gt;&gt;,我有一个密钥列表 List&lt;string&gt; myKeys 和许多我刚刚创建的 List&lt;string&gt;。我想将它们添加到字典中,如下所示:

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);

有什么简单的方法可以完成这项工作吗? 非常感谢。

【问题讨论】:

  • 在将它们添加到字典之前是否需要创建它们?
  • 可能首先摆脱所有xx_TCList 变量是要走的路。为什么你有这些?
  • 您希望它们的本地变量名称从字符串列表中假定它们的设计时名称?你是在代码生成,反射之后......可能将匿名列表实例添加到字典并始终通过键访问它们就足够了。
  • @john 之前或之后都可以,我想知道不同的想法; )
  • 变量名包含有价值的信息很奇怪.. 很确定它是某种 X/Y

标签: c# string list dictionary


【解决方案1】:

您可以遍历名称并相应地在字典中添加一个条目:

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

【讨论】:

    【解决方案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>());
    

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

    【讨论】:

    • 错字丢失 // 。接近价值=>。使用 6 字符编辑规则我无法修复它^^
    【解决方案3】:

    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>));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2012-11-03
      • 2014-02-11
      • 2019-01-14
      相关资源
      最近更新 更多