使用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

回到顶部