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]);
非常感谢你,我对这种类型的命令还不熟悉,你很有帮助谢谢你的清晰解释你太棒了!