是否有一个函数可以用来使用给定的名称列表初始化多列表?例如:
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);
有没有简单的方法来完成这项工作?非常感谢。
你可以摆脱所有额外声明的列表并在字典中收集它们。如果您已将列表中的所有名称都用作键,则可以使用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>());
使用这种方法,下次你想,你需要更多这些列表,只需扩展你的枚举,字典将自动填充额外的列表和正确的名称!
您可以遍历名称并相应地向字典添加条目:
foreach(var name in new []{ "list", "names", "here" })
{
myDic[name] = new List<string>();
}
它与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>));