使用C#中的LINQ删除字典中的重复键
我已经尝试了下面的代码,在添加它之前删除字典中的重复键。使用C#中的LINQ删除字典中的重复键
样品的编号:
string conString = "Host = local;UserName = UID; Password = PWD;Host =localhost"; var sp = conString.Split(';');
Dictionary<string, string> keyValue = new Dictionary<string, string>();
foreach (var k in sp)
{
if (k.Contains('='))
{
var conSP = k.Split(new char[] { '=' }, 2);
if (keyValue.All(i =>
i.Key != conSP[0]))
keyValue.Add(conSP[0], conSP[1]);
}
}
示例结果:
KEYVALUE [0]。重点=主机,KEYVALUE [0]。价值=本地
KEYVALUE [1]。重点= username,KeyValue [1] .Value = UID
KeyValue [2] .Key = Password,KeyValue [2] .Value = PWD
但我需要使用linq相同的结果。所以我试着用linq下面的代码来获取输出。
var keyValue = conString.Split(';') .Where(kvp => kvp.Contains('='))
.Select(kvp => kvp.Split(new char[] { '=' }, 2))
.ToDictionary(kvp => kvp[0].Trim(),kvp => kvp[1].Trim(),StringComparer.InvariantCultureIgnoreCase);
但在这段代码中,我得到了下面的异常。
“具有相同键的项已被添加”
任何人都可以建议我如何解决这个问题?
在此先感谢。
回答:
由于@Sedat Kapanoglu描述;你不应该添加重复项目。添加前应检查它。 因此,要删除重复项,您可以像这样执行它;
var keyValue = conString.Split(';') .Where(kvp => kvp.Contains('='))
.Select(kvp => kvp.Split(new char[] { '=' }, 2))
.GroupBy(kvp => kvp[0])
.Select(kvp => kvp.FirstOrDefault())
.ToDictionary(kvp => kvp[0].Trim(), kvp => kvp[1].Trim(), StringComparer.InvariantCultureIgnoreCase);
回答:
你可以试试这个LINQ查询:
var d = sp.Select(x => x.Split('=')) .GroupBy(x => x[0])
.Select(x => x.First())
.ToDictionary(x => x[0], x=> x[1]);
结果:
[Host , local] [UserName , UID]
[Password , PWD]
回答:
Connection String Builder是用于解析连接字符串的详细发送给打印机,但它使最后一个值:
new System.Data.Odbc.OdbcConnectionStringBuilder( "Host = local;UserName = UID; Password = PWD;Host =localhost")
结果:
Key Value host localhost
username UID
password PWD
以上是 使用C#中的LINQ删除字典中的重复键 的全部内容, 来源链接: utcz.com/qa/257609.html