【问题标题】:Compare two lists to make them equal in elements比较两个列表以使它们在元素上相等
【发布时间】:2013-10-19 08:14:05
【问题描述】:

我有两个名为 List1 和 List2 的列表。

现在说 List1 和 List2 有 5 个元素 {a,b,c,d,e}。现在,如果我从 List1 中删除 {b,c} 并将 {f,g,h} 添加到 List1,我怎样才能使 List2 相等(通过对其执行添加和删除操作。)。

【问题讨论】:

  • 为什么不List2 = List1

标签: c# list compare


【解决方案1】:

“(通过对其进行添加和删除操作。)”

为什么会有这个限制?
最简单、最可靠且可能最快的方法:

List2 = List1.ToList();

但如果你真的想要它:

List2.RemoveRange(List2.Except(List1));  // You may have to write RemoveRange()
List2.AddRange(List1.Except(List2));

【讨论】:

  • 后面你需要一个循环来移除:)
  • @SriramSakthivel - 为什么?我不这么认为。但我修复了添加/删除部分,最初我错了。
  • @Henk - 因为List1List2 的引用不同。因此,对于List1 的进一步更新将不会反映到List2
  • 我希望你知道 Except 返回一个序列,而 Remove/Add 需要一个元素作为参数
  • @SriramSakthivel - 对,考虑一下这个伪代码。我会用AddRange()编辑
【解决方案2】:

让 List2 只是 List1 的一个引用,例如:

List<string> list1 = new List<string>();
List<string> list2 = list1;

修改list1也会影响list2

【讨论】:

    【解决方案3】:

    @Henk Holterman 提出了正确的方法(在答案的第一部分),但如果你想要你在 OP 中提到的内容,那么你可以使用这个

    list2.RemoveAll(l => !list1.Contains(l));
    list2.AddRange(list1.Except(list2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2017-05-11
      • 2017-12-23
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多