如何更新c#字典,其中设置了键,嵌套foreach循环中的值为空
只是学习c#,所以我想知道为什么我的代码不起作用,以及如何使这更容易的任何有用的输入。这只是我正在尝试编写的一个小工具的一部分,它将获取两个文件并将它们放在一起构建一个.json文件,所以我想从一个dictionary对象开始。谢谢大家! 我有两个文本文件,一个是字典键列表,另一个是字典值。我想将这两个文本文件合并到一个dictionary对象中,但由于某种原因,它正确地填充了键,但值都是相同的,是列表中的最后一个。因此它会到达键列表的底部,因为它位于最后一个键值上,所以它只会重复所有键的最后一个值。例如:如何更新c#字典,其中设置了键,嵌套foreach循环中的值为空,c#,dictionary,foreach,C#,Dictionary,Foreach,只是学习c#,所以我想知道为什么我的代码不起作用,以及如何使这更容易的任何有用的输入。这只是我正在尝试编写的一个小工具的一部分,它将获取两个文件并将它们放在一起构建一个.json文件,所以我想从一个dictionary对象开始。谢谢大家! 我有两个文本文件,一个是字典键列表,另一个是字典值。我想将这两个文本文件合并到一个dictionary对象中,但由于某种原因,它正确地填充了键,但值都是相同的,是列表中的最后一个。因此它会到达键列表的底部,因为它位于最后一个键值上,所以它只会重复所有键的最后一
txt file 1:
one
two
three
txt file 2:
peach
lime
mango
output:
one, mango
two, mango
three, mango
I want:
one, peach
two, lime
three, mango
这是我的代码:
try
{
string path1 = @"C:\temp\langVars.txt";
string path2 = @"C:\temp\langValues.txt";
string[] readVars = File.ReadAllLines(path1);
string[] readVals = File.ReadAllLines(path2);
Dictionary<string, string> dictionaryVars = new Dictionary<string, string>();
foreach (string s1 in readVars)
{
dictionaryVars.Add(s1, "");
foreach (string s2 in readVals)
dictionaryVars[s1] = (s2);
}
foreach (KeyValuePair<string, string> kvp in dictionaryVars)
{
Console.WriteLine("{0}, {1}", kvp.Key, kvp.Value);
}
试试看
{
字符串路径1=@“C:\temp\langVars.txt”;
字符串路径2=@“C:\temp\langValues.txt”;
字符串[]readVars=File.ReadAllLines(路径1);
字符串[]readVals=File.ReadAllLines(路径2);
Dictionary dictionars=new Dictionary();
foreach(readVars中的字符串s1)
{
添加(s1,“”);
foreach(readVals中的字符串s2)
字典vars[s1]=(s2);
}
foreach(dictionaryVars中的KeyValuePair kvp)
{
WriteLine(“{0},{1}”,kvp.Key,kvp.Value);
}
此处不应使用嵌套的foreach循环:
foreach (string s1 in readVars)
{
dictionaryVars.Add(s1, "");
foreach (string s2 in readVals)
dictionaryVars[s1] = (s2);
}
嵌套的foreach循环意味着您正在执行dictionaryVars[s1]=(s2);
对于每个s2
都有相同的s1
。即:
dictionaryVars["one"] = "peach";
dictionaryVars["one"] = "lime";
dictionaryVars["one"] = "mango";
dictionaryVars["two"] = "peach";
dictionaryVars["two"] = "lime";
dictionaryVars["two"] = "mango";
dictionaryVars["three"] = "peach";
dictionaryVars["three"] = "lime";
dictionaryVars["three"] = "mango";
因此,最后三个键的值都是mango
您还可以从另一个名为dictionary
的字典(而不是dictionaryVars
的字典)中打印键值对
应使用一个for
循环同时迭代两个数组:
for (int i = 0 ; i < readVars.Length ; i++) {
dictionaryVars.Add(readVars[i], readVals[i]);
}
此处不应使用嵌套的foreach循环:
foreach (string s1 in readVars)
{
dictionaryVars.Add(s1, "");
foreach (string s2 in readVals)
dictionaryVars[s1] = (s2);
}
嵌套的foreach循环意味着您正在执行dictionaryVars[s1]=(s2);
对于每个s2
都有相同的s1
。即:
dictionaryVars["one"] = "peach";
dictionaryVars["one"] = "lime";
dictionaryVars["one"] = "mango";
dictionaryVars["two"] = "peach";
dictionaryVars["two"] = "lime";
dictionaryVars["two"] = "mango";
dictionaryVars["three"] = "peach";
dictionaryVars["three"] = "lime";
dictionaryVars["three"] = "mango";
因此,最后三个键的值都是mango
您还可以从另一个名为dictionary
的字典(而不是dictionaryVars
的字典)中打印键值对
应使用一个for
循环同时迭代两个数组:
for (int i = 0 ; i < readVars.Length ; i++) {
dictionaryVars.Add(readVars[i], readVals[i]);
}