使用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();
答案 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);