C# 合并两个具有重叠数据的列表

标签 c# .net linq list overlapping

如果我有 2 个字符串列表

List<string> history = new List<string>(){ "AA", "BB", "CC", "AA" };
List<string> potentialNew = new List<string>(){ "CC", "AA", "DD", "EE", "FF", "AA"};

我需要一种方法来合并列表,同时防止“重叠”并保持相同的顺序。因此,在上面的示例中,将有一个组合列表:

AA, BB, CC, AA, DD, EE, FF, AA

换句话说,只有 DD、EE、FF 和 AA 被添加到 history 列表中。

几天来我一直在努力解决这个问题,无数次搜索都没有找到解决方案。任何帮助将不胜感激!

最佳答案

这将为您提供问题中提到的给定输入集的预期输出:

 List<string> history = new List<string>() { "AA", "BB", "CC", "AA" };
 List<string> potentialNew = new List<string>() { "CC", "AA", "DD", "EE", "FF" };
 var result = history.Concat(potentialNew.Where(x => !history.Contains(x)).ToList());

.Concat()方法允许您连接两个列表。我们正在从第一个列表中不存在的 potentialNew 中提取特定项目,并将它们与第一个列表连接。

更新:根据我们的讨论,我得出的结论是您正在寻找类似以下内容:

string lastItem = history.Last();
   int lastIndexToCheck=history.Count-2,i=0;
   for (; i < potentialNew.Count - 1; i++)
       {
          if (potentialNew[i] == lastItem && potentialNew[i - 1] == history[lastIndexToCheck])
              {
                 break;
              }
       }
       history.AddRange(potentialNew.Skip(i+1).ToList());  

现在 history 将包含所需的元素集。

关于C# 合并两个具有重叠数据的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930477/

相关文章:

c# - 使用 Linq2Nibernate 和 IQueryable 进行界面设计

c# - 连接两个表后访问所有数据并使用 linq 对它们进行分组

c# - 如何使用 MVVM Light 检测 TextBox 中的按键

C#:如何将嵌套结构从 C 转换为 C#?

c# - 使用 PostAsJsonAsync C# 时出现错误请求

c# - 部分 View 错误 mvc 需要 IEnumerable 类型的模型项

.net - WPF中最重要的认证?

c# - 如何使用 LINQ 更新所有具有相同值的记录?

.net - 设置 DataGridView 单元格格式而不更改基础值?

c# - 对实现接口(interface)的对象进行 LINQ 查询