C# 如何使用.ToDictionary忽略文本文件中的重复项,我总是会得到这样一个错误:“我的;已添加具有相同密钥的项";

C# 如何使用.ToDictionary忽略文本文件中的重复项,我总是会得到这样一个错误:“我的;已添加具有相同密钥的项";,c#,todictionary,C#,Todictionary,我遇到了这个错误: “已添加具有相同密钥的项” 还有其他更好的方法吗 我真的很感谢任何人在这个代码上的帮助 这是我的代码 string textfiletest = "C:/BSM_Command_v2.txt"; var data = File .ReadAllLines(textfiletest) .Select(x => x.Split(':')) .Where(x => x.Length > 1)

我遇到了这个错误:

“已添加具有相同密钥的项”

还有其他更好的方法吗

我真的很感谢任何人在这个代码上的帮助

这是我的代码

       string textfiletest = "C:/BSM_Command_v2.txt";
       var data = File 
       .ReadAllLines(textfiletest)
       .Select(x => x.Split(':'))
       .Where(x => x.Length > 1)
      .ToDictionary(x => x[0].Trim(), x => x[1]);
 RTRV-BTS_CALL_ACCESS-DATA : BTS=3~3
 M4010 RETRIEVE BTS CALL ACCESS DATA
   PRIMARY_BSC_ID        : 0                                             
   PRIMARY_BSC_RACK_ID   : 1                                             
   PRIMARY_CMP_IP_V4     : 10.233.56.133                                 
   SECONDARY_USED_FLAG   : ON                                            
   SECONDARY_BSC_RACK_ID : 0                                             
   SECONDARY_CMP_IP_V4   : 10.233.56.69                                  
   CALL_ACCESS_CONTROL_1 : 0                                             
   CALL_ACCESS_CONTROL_2 : 0                                             
   CALL_ACCESS_CONTROL_3 : 0                                             
   CALL_ACCESS_CONTROL_4 : 0                                             
   CALL_ACCESS_CONTROL_5 : 0                                             
   CALL_ACCESS_CONTROL_6 : 0                                             
   CALL_ACCESS_CONTROL_7 : 0                                             
   CALL_ACCESS_CONTROL_8 : 0                                             
   RESULT = OK
 COMPLETED


 RTRV-BTS_EVDO_CALL_ACCESS-DATA : BTS=3~3
 M4029 RETRIEVE BTS EVDO CALL ACCESS DATA
   PRIMARY_BSC_ID        : 0                                             
   PRIMARY_BSC_RACK_ID   : 1                                             
   PRIMARY_CMP_IP_V41     : 10.233.56.133                                 
   SECONDARY_USED_FLAG   : ON                                            
   SECONDARY_BSC_RACK_ID : 0                                             
   SECONDARY_CMP_IP_V4   : 10.233.56.69                                  
   RESULT = OK
 COMPLETED
这是我的文本文件

       string textfiletest = "C:/BSM_Command_v2.txt";
       var data = File 
       .ReadAllLines(textfiletest)
       .Select(x => x.Split(':'))
       .Where(x => x.Length > 1)
      .ToDictionary(x => x[0].Trim(), x => x[1]);
 RTRV-BTS_CALL_ACCESS-DATA : BTS=3~3
 M4010 RETRIEVE BTS CALL ACCESS DATA
   PRIMARY_BSC_ID        : 0                                             
   PRIMARY_BSC_RACK_ID   : 1                                             
   PRIMARY_CMP_IP_V4     : 10.233.56.133                                 
   SECONDARY_USED_FLAG   : ON                                            
   SECONDARY_BSC_RACK_ID : 0                                             
   SECONDARY_CMP_IP_V4   : 10.233.56.69                                  
   CALL_ACCESS_CONTROL_1 : 0                                             
   CALL_ACCESS_CONTROL_2 : 0                                             
   CALL_ACCESS_CONTROL_3 : 0                                             
   CALL_ACCESS_CONTROL_4 : 0                                             
   CALL_ACCESS_CONTROL_5 : 0                                             
   CALL_ACCESS_CONTROL_6 : 0                                             
   CALL_ACCESS_CONTROL_7 : 0                                             
   CALL_ACCESS_CONTROL_8 : 0                                             
   RESULT = OK
 COMPLETED


 RTRV-BTS_EVDO_CALL_ACCESS-DATA : BTS=3~3
 M4029 RETRIEVE BTS EVDO CALL ACCESS DATA
   PRIMARY_BSC_ID        : 0                                             
   PRIMARY_BSC_RACK_ID   : 1                                             
   PRIMARY_CMP_IP_V41     : 10.233.56.133                                 
   SECONDARY_USED_FLAG   : ON                                            
   SECONDARY_BSC_RACK_ID : 0                                             
   SECONDARY_CMP_IP_V4   : 10.233.56.69                                  
   RESULT = OK
 COMPLETED

写十行代码并手动创建字典

var data = File 
   .ReadAllLines(textfiletest)
   .Select(x => x.Split(':'))
   .Where(x => x.Length > 1);

var dict = new Dictionary<string, string>();

foreach (string[] parts in data)
{
    string key = parts[0].Trim();

    if (!dict.ContainsKey(key))
    {
        dict.Add(key, parts[1]);
    }
}
您可以使用
.GroupBy()
键,并为每个组获取
.First()
值,并在
.ToDictionary()中使用它

另一种解决方案是使用
.ToLookup()
,它返回一个
ILookup
,这与
字典非常相似,因此多值字典:

var data = File
    .ReadAllLines(textfiletest)
    .Select(x => x.Split(':'))
    .Where(x => x.Length > 1)
    .ToLookup(x => x[0].Trim(), x => x[1]);

如果您只想忽略重复项,这里有一个选项,可以按键对所有内容进行分组,并选择组的第一个成员作为值

   string textfiletest = "C:/BSM_Command_v2.txt";
   var data = File 
   .ReadAllLines(textfiletest)
   .Select(x => x.Split(':'))
   .Where(x => x.Length > 1)
   .GroupBy(x => x[0].Trim())
   .ToDictionary(x => x.Key, x => x.First()[1]);

非常感谢你,我对这种类型的命令还不熟悉,你很有帮助谢谢你的清晰解释你太棒了!