如何更新c#字典,其中设置了键,嵌套foreach循环中的值为空

如何更新c#字典,其中设置了键,嵌套foreach循环中的值为空,c#,dictionary,foreach,C#,Dictionary,Foreach,只是学习c#,所以我想知道为什么我的代码不起作用,以及如何使这更容易的任何有用的输入。这只是我正在尝试编写的一个小工具的一部分,它将获取两个文件并将它们放在一起构建一个.json文件,所以我想从一个dictionary对象开始。谢谢大家! 我有两个文本文件,一个是字典键列表,另一个是字典值。我想将这两个文本文件合并到一个dictionary对象中,但由于某种原因,它正确地填充了键,但值都是相同的,是列表中的最后一个。因此它会到达键列表的底部,因为它位于最后一个键值上,所以它只会重复所有键的最后一

只是学习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]);
}