比较两个队列并查找在两个队列中都不存在的元素

本文关键字:两个 队列 不存在 元素 比较 查找 | 更新日期: 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);
            }
        }
    }
}