使用列表名称变量创建2列列表

时间:2020-08-11 14:34:55

标签: c# list dictionary

由于原始帖子(Create List with name from variable)太旧了,所以我不想以此为答案。

但是,我想添加上述解决方案的用法,因为它对我而言并不明显。而且,这可能会帮助我的一些新手。此外,我遇到了一些我不知道该如何解决的问题。

我需要一种使用变量名创建列表的方法,在本例中为“ mstrClock”,用于时序图。

但是,我无法让.NET接受两列列表,所以我最终得到了两个字典。

是否有一种结构化方法,以便我可以在两列中使用单个字典?

dictD.Add("mstrClock", new List<double>());
dictL.Add("mstrClock", new List<string>());

然后,当我开发时序图时,我将添加到列表如下:

dictD["mstrClock"].Add(x);  // This value will normally be the time value.
dictL["mstrClock"].Add("L");    // This value will be the "L", "F" or "H" logic level

然后获取我执行的数据:

for (int n = 0; n < dictD["mstrClock"].Count; n++)
{
    listBox1.Items.Add(dictL["mstrClock"][n] + "\t" + dictD["mstrClock"][n].ToString());
}

3 个答案:

答案 0 :(得分:0)

为什么不只在字典中存储要显示的内容?

dict.Add("mstrClock", new List<string>());
dict["mstrClock"].Add($"L\t{x}"); 

for (int n = 0; n < dict["mstrClock"].Count; n++)
{
    listBox1.Items.Add(dict["mstrClock"][n]);
}

另一方面,您甚至需要一本字典吗?用一把钥匙的字典有什么意义?如果只需要List<string>,则只需创建一个即可。

var items = new List<string>());
items.Add($"L\t{x}"); 

foreach (var item in items)
{
    listBox1.Items.Add(item);
}

答案 1 :(得分:0)

您可以在现代C#中使用Tuples来创建您的两列列表,如下所示:

var list = new List<(double time, string logicLevel)>();
list.Add((1, "L"));
list.Add((2, "F"));

foreach (var element in list)
{
    listBox1.Items.Add($"{element.time} \t {element.logicLevel}");
}

如果必须使用字典,则可以将上面的代码更改为:

var dict = new Dictionary<string, List<(double time, string logicLevel)>>();

dict["mstrClock"] = new List<(double time, string logicLevel)>();
dict["mstrClock"].Add((1, "L"));
dict["mstrClock"].Add((2, "F"));

var list = dict["mstrClock"];
foreach (var element in list)
{
    listBox1.Items.Add($"{element.time} \t {element.logicLevel}");
}

答案 2 :(得分:0)

创建2列列表的一种方法是创建key/value pairs的列表:

var list = new List<KeyValuePair<double, string>();
list.Add(new KeyValuePair<double, string>(1, "L");

foreach (KeyValuePair<double, string> element in list)
{
    listBox1.Items.Add($"{element.key} \t {element.value}");
}