C# 重复数据删除
我有两个队列,我想删除重复的数据,我只想在队列3中插入不重复的数据C# 重复数据删除,c#,C#,我有两个队列,我想删除重复的数据,我只想在队列3中插入不重复的数据 foreach (GPJ_Model _gpjQx in gpjQx) { foreach (GPJ_Model _Model in mainP) { if (_gpjQx.dep.CompareTo(_Model.dep) != 0) {
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);
你的问题到底是什么?我本来打算提出类似的建议,但问题是模棱两可的:他是否也想把他们从队列中删除?