【问题标题】:How can I concatenate two C# Lists of the type List<KeyValuePair<string,string>>. I have some duplicate values and I need those duplicate values如何连接两个 List<KeyValuePair<string,string>> 类型的 C# 列表。我有一些重复的值,我需要那些重复的值
【发布时间】:2012-07-31 19:52:48
【问题描述】:

任何 LINQ 解决方案(最好)将不胜感激。在连接两者时我需要重复的值。

【问题讨论】:

  • 如果您的意思是“相交”而不是“连接”,则可以编辑问题的标题。

标签: c# .net list generics concatenation


【解决方案1】:

如果要找出两个列表中都有哪些项目,则需要使用Enumerable.Intersect() 方法。

    var list1 = new List<KeyValuePair<string,string>>();
    var list2 = new List<KeyValuePair<string,string>>();

    list1.Add(new KeyValuePair<string,string>("key1", "value1"));
    list1.Add(new KeyValuePair<string,string>("key2", "value2"));
    list2.Add(new KeyValuePair<string,string>("key1", "value1"));
    list2.Add(new KeyValuePair<string,string>("key3", "value3"));

    var inBothLists = list1.Intersect(list2); // contains only key1,value1

有两种重载,一种采用IEqualityComparer&lt;T&gt;,因此如果默认的没有按照您想要的方式执行比较,您可以编写并提供您自己的。

【讨论】:

  • KeyValuePair&lt;T1, T2&gt; 的相等比较器是否真的检查 Key:T1Value:T2 的值或基于 KeyValuePair&lt;T1, T2&gt; 实例的基于实例的比较器(如 .ReferenceEquals())?
  • @AndreasNiedermair 刚刚使用new KeyValuePair&lt;string,string&gt;("key#", "value#") 进行了修改,它的行为似乎符合预期。
  • 如果 keyvalue 的相等比较器没有按预期运行,请使用 Tuple&lt;string,string&gt; 它可以工作。
猜你喜欢
  • 2018-02-06
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多