重复数据删除

时间:2009-02-23 07:49:14

标签: c#

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

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

4 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

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

这是一个与语言无关的版本:

  • 创建两个排序列表,每个队列一个
  • 同步遍历每个队列,比较每个元素
    • 如果相等:删除并添加到第三个列表
    • (如果队列中有多个相同的元素,请重复,直到您查看新的不同元素)

答案 2 :(得分:0)

简化,

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

这样做是为q3的所有元素添加q3,多次,q2中的每个元素都与q1的元素不同。如果q1为[1, 2, 3]且q2也为[1, 2, 3],则q3将为[1, 1, 2, 2, 3, 3]

我怀疑这是你想要的。

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

答案 3 :(得分:0)

LINQ版

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

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