从一个队列中删除另一个队列中存在的元素

时间:2010-11-22 22:36:08

标签: c# .net asp.net

使用C#

我有

队列N:3,4,9,1

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

我想删除Queue N中存在的队列A中的所有元素

最终得到队列R:1,2,8,12,13

我如何在C#

中执行此操作

尝试使用someones API,它们提供了获取两个队列的方法,我需要根据返回的一个队列进行过滤。

谢谢,

-Seth

更新了代码示例:

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

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

3 个答案:

答案 0 :(得分:6)

使用LINQ-to-Objects最简单的方法......

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的第二个参数,它定义了如何确定相等性。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果你可以使用linq,请查看Except方法。

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);