比较两个队列并查找在两个队列中都不存在的元素
本文关键字:两个 队列 不存在 元素 比较 查找 | 更新日期: 2023-09-27 18:17:03
我目前正在尝试比较2队列。队列中的大多数条目将是重复的(两个队列将具有相同的条目)。我想要做的是,找到一个在两个队列中都不存在的条目。
例如,假设下面是正在讨论的两个队列。
1st queue - A S D F G
2nd queue - S A D G Q
条目A, S, D, G同时存在于两个队列中。但是,条目F对于第一个队列是唯一的,而Q对于第二个队列是唯一的。我想找出哪些项是唯一的。有没有这样的函数?
为了解决这个问题,我需要使用队列,因为FIFO行为是至关重要的。
var firstQueue = new Queue<char>() {};
var secondQueue = new Queue<char>() {};
foreach (char obj in firstQueue)
{
if (!secondQueue.Contains(obj))
{
// Doesn't exist in the second queue -> Do something
}
}
一个更短的方法是使用LINQ:
// Will contain all the values that secondQueue doesn't contain.
var exampleOne = firstQueue.Except(secondQueue);
// Will contain all the values that firstQueue doesn't contain.
var exampleTwo = secondQueue.Except(firstQueue);
// Will contain all the values that both queues have in common.
var exampleThree = firstQueue.Intersect(secondQueue);
将打印不匹配的元素到控制台窗口。您也可以将它们保存为列表或数组。
using System;
using System.Collections;
using System.Collections.Generic;
public class QueueDemo
{
public static void Main(String[] args)
{
List<char> list1 = new List<char>{'A', 'S', 'D', 'F', 'G' };
Queue<char> Q1 = new Queue<char>(list1);
List<char> list2 = new List<char>{'S', 'A', 'D', 'G', 'Q' };
Queue<char> Q2 = new Queue<char>(list2);
foreach (char e in Q1)
{
if (!Q2.Contains(e))
{
Console.WriteLine(e);
}
}
foreach (char e in Q2)
{
if (!Q1.Contains(e))
{
Console.WriteLine(e);
}
}
}
}