List <KeyValuePair>覆盖添加的值

我目前遇到一个问题,我想在foreach循环中向同一Key添加不同的值。

List<keyvaluepair<string,Dictionary<string,string>>> sysList = new List<keyvaluepair<string,string>>>();
Dictionary<string,string> newSystem = new Dictionary<string,string>();
string line1="";
string line2="";
string quit="";
foreach(Worksheet ws in workbook.Worksheets)
{
     while(quit != q)
     {
        newSystem.Clear();
        line1 = Console.ReadLine();
        line2 = Console.ReadLine();
        quit = Console.ReadLine();
     }
     newSystem.Add(line1,line2);
     sysList.Add(new keyvaluepair<string,string>>(ws.Name,newSystem));
}

对于第一个工作表的第一次迭代(在一段时间内),一切都很好。如果我选择在此工作表中进行> 1次迭代,则会添加一个新条目,但Dictionary值都相同,例如:

syList[0]: "worksheetName","test1","test2"
syList[1]: "worksheetName","test2"
syList[2]: "worksheetName","test2"

如果有多个foreach迭代,则名称保持不变,但newSys添加的Dictionary Key和Values相同[在第二个foreach迭代之后]:

syList[0]: "worksheetName1","test2"
syList[1]: "worksheetName1","test2"
syList[2]: "worksheetName1","test2"
syList[3]: "worksheetName2","test2"
syList[4]: "worksheetName2","test2"

最初,我尝试使用字典,但除了使用List之外,无法正确处理相同的键,也找不到合适的解决方案。

我非常感谢您提供的任何帮助。 如果您需要其他详细信息,请告诉我。

编辑: 所需的结果(示例):

#########:         ws.Name,line1,line2
syList[0]: "worksheetName1","ABC","1"
syList[1]: "worksheetName1","DEF","2"
syList[2]: "worksheetName1","5"
syList[3]: "worksheetName2","ABD","4"
syList[4]: "worksheetName2","ZZZ","1"
dhtz125 回答:List <KeyValuePair>覆盖添加的值

如果您不想在键中保持任何唯一性,而只想要一个平面列表,则可以使用C#7元组语法来构建列表。

List<string> sheetNames = new List<string>() { "worksheetName1","worksheetName2" };
var sysList = new List<(string SheetName,string line1,string line2)>();

string line1 = string.Empty; 
string line2 = string.Empty; 
string quit = string.Empty;

foreach (var sheet in sheetNames)
{
    while (quit != "E")
    {
        line1 = Console.ReadLine();
        line2 = Console.ReadLine();
        quit = Console.ReadLine();

        sysList.Add((sheet,line1,line2));
    }
    quit = string.Empty;
}
,

请尝试以下代码:

List<List<string>> syList =  new List<List<string>>() {
                                new List<string>() {"worksheetName1","test1","test2"},new List<string>() {"worksheetName1",new List<string>() {"worksheetName2","test2"}
                    };
 Dictionary<string,Dictionary<string,List<string>>> dict = syList
    .GroupBy(x => x.First(),y => y)
        .ToDictionary(x => x.Key,y => y
            .GroupBy(a => a.Skip(1).FirstOrDefault(),b => b.Last())
            .ToDictionary(a => a.Key,b => b.ToList()));


//using normal looping
 Dictionary<string,List<string>>> dict2 = new Dictionary<string,List<string>>>();

 foreach (List<string> sy in syList)
 {
     if (dict2.ContainsKey(sy[0]))
     {
         Dictionary<string,List<string>> tempDict = dict2[sy[0]];
         if (tempDict.ContainsKey(sy[1]))
         {
             tempDict[sy[1]].Add(sy[2]);
         }
         else
         {
             List<string> newList = new List<string>() { sy[2] };
             tempDict.Add(sy[1],newList);

         }
     }
     else
     {
         Dictionary<string,List<string>> newDict = new Dictionary<string,List<string>>();
         newDict.Add(sy[1],new List<string> { sy[2] });
         dict2.Add(sy[0],newDict);

     }
 }
本文链接:https://www.f2er.com/2429201.html

大家都在问