2009-02-23 86 views
-1

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

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

究竟什么是你的问题? – 2009-02-23 07:51:46

回答

0

为了简化,

foreach (E e1 in q1) 
    { 
     foreach (E e2 in q2) 
     { 
      if (e1.CompareTo(e2) != 0) 
      { 
       q3.Enqueue(e1); 
      } 
     } 
    } 

这是什么东西做的是增加了Q3 Q1,多次,一次在第二季度的每一个元素是从Q1的该元素不同的所有元素。如果q1是[1, 2, 3]且q2也是[1, 2, 3]那么q3将具有[1, 1, 2, 2, 3, 3]

我怀疑这是你想要的。

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

1

就个人而言,我会通过建立优化的哈希设定的现有的数据:

var existing = new HashSet<WhateverType>(_gpjQx.Select(x=>x.dep)); 
foreach(var item in mainP) { 
    if(!existing.Contains(item.dep)) { 
     updateP.Enqueue(item); 
    } 
} 

(其中WhateverTypedep属性的类型)。

这应该使事情O(N + M),而不是O(N * M)。

+0

我打算提出类似的建议,但问题不明确:他是否也想将其从队列中移除? – 2009-02-23 07:58:32

0

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

这里是一个语言无关版本:

  • 创建两个已排序的列表,每一个队列
  • 步骤通过在同步每个队列,每个元件
    • 比较,如果它们是相等的:除去并添加到第三个列表
    • (如果多个相同的元素可以在队列中,重复直到您正在查看新的,不同的元素)
0

LINQ版本

var distinct = gpjQx.Union(mainP).Distinct(); 

foreach(var value in distinct) 
    updateP.Enqueue(value);