2010-11-22 111 views
1

使用C#删除从一个队列中存在的另一个队列

元素我有

队列N:3,4 9,11

队列答:1,2,3,4, 8,9,11,12,13

我想删除从队列中的存在于队列ñ

所有元素和与队列ř结束:1,2,8,12,13

我怎么做这在C#

试图与某人的API合作,他们提供一种方式来获得的两个队列,我需要筛选基于一个队列返回。

感谢,

-Seth

更新的代码示例:

我使用的是自定义数据类型ModuleDetails

Queue<ModuleDetails> defaultQueue = apiCallDefault(); 
Queue<ModuleDetails> modQueue = apiCallAllModules(); 

回答

6

最简单的使用LINQ到对象做到这一点。 ..

var qN = new Queue<int>(new[]{3, 4, 9, 11}); 
var qA = new Queue<int>(new[]{1, 2, 3, 4, 8, 9, 11, 12, 13}); 
var qR = qA.Except(qN); 

更新:只要ModuleDetails实现IEquatable,下面的代码将工作得很好。如果您无法修改ModuleDetails,则始终可以提供一个IEqualityComparer作为Except的第二个参数,它定义了如何确定相等性。

+0

然后调用`新队列(qR);`使它成为`队列`而不是`IEnumerable `。 – strager 2010-11-22 22:42:40

0

如果您可以使用linq,请看方法。

int[] first = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
int[] second = new int[] {    4, 5, 6,   10 }; 

var q = first.Except(second); 
1

请注意,如果您的队列中填充了自定义对象,那么您将不得不实现IEqualityComparer接口。显然你不需要int类型,因为它已经实现了接口。

相关问题