C# 重复数据删除

C# 重复数据删除,c#,C#,我有两个队列,我想删除重复的数据,我只想在队列3中插入不重复的数据 foreach (GPJ_Model _gpjQx in gpjQx) { foreach (GPJ_Model _Model in mainP) { if (_gpjQx.dep.CompareTo(_Model.dep) != 0) {

我有两个队列,我想删除重复的数据,我只想在队列3中插入不重复的数据

            foreach (GPJ_Model _gpjQx in gpjQx)
        {
            foreach (GPJ_Model _Model in mainP)
            {
                if (_gpjQx.dep.CompareTo(_Model.dep) != 0)
                {
                    updateP.Enqueue(_Model);
                }
            }
        }

就个人而言,我会通过构建现有数据的散列集进行优化:

var existing = new HashSet<WhateverType>(_gpjQx.Select(x=>x.dep));
foreach(var item in mainP) {
    if(!existing.Contains(item.dep)) {
        updateP.Enqueue(item);
    }
}
var existing=newhashset(_gpjQx.Select(x=>x.dep));
foreach(mainP中的var项目){
如果(!existing.Contains(item.dep)){
更新排队(项目);
}
}
(其中
WhateverType
dep
属性的类型)


这应该是O(n+m)而不是O(n*m)。

假设您的问题是:如何在两个队列中找到重复项,删除它们并将它们复制到新队列

以下是语言不可知的版本:

  • 创建两个排序列表,每个队列一个
  • 同步遍历每个队列,比较每个元素
    • 如果它们相等:删除并添加到第三个列表
    • (如果队列中可能有多个相同的元素,请重复此操作,直到您看到一个新的、不同的元素)
    • 为了简化

          foreach (E e1 in q1)
          {
              foreach (E e2 in q2)
              {
                  if (e1.CompareTo(e2) != 0)
                  {
                      q3.Enqueue(e1);
                  }
              }
          }
      
      这样做的目的是向第三季度添加第一季度的所有元素,多次,第二季度中与第一季度元素不同的每个元素一次。如果q1是
      [1,2,3]
      ,而q2也是
      [1,2,3]
      ,那么q3将具有
      [1,1,2,2,3]

      我怀疑那是你想要的

      尝试正确描述问题,可能使用示例。很有可能,你自己会想出解决办法。

      LINQ版本

      var distinct = gpjQx.Union(mainP).Distinct();
      
      foreach(var value in distinct)
          updateP.Enqueue(value);
      

      你的问题到底是什么?我本来打算提出类似的建议,但问题是模棱两可的:他是否也想把他们从队列中删除?