我有两个队列,我想要删除数据是重复的,我想在队列3中只插入不重复
foreach (GPJ_Model _gpjQx in gpjQx)
{
foreach (GPJ_Model _Model in mainP)
{
if (_gpjQx.dep.CompareTo(_Model.dep) != 0)
{
updateP.Enqueue(_Model);
}
}
}
答案 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);
}
}
(其中WhateverType
是dep
属性的类型)。
这应该使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);