C#如何比较两个排序集?

时间:2016-02-19 22:28:52

标签: c# list collections set

所以在我的程序中,我有一个包含1000个票证对象的List。每个对象都有一个int ID和一个6个数字的int SortedSet。我希望用户能够输入六个数字,并将这6个数字与列表中每个1000个对象中的有序集合中的6个6个数字进行比较。如果数字匹配,我想要输出对象的ID。实现这一目标的最佳方式是什么?我是否应该将用户输入的6个数字放入SortedSet?这就是我在想的事情。如果是这样,我如何将SortedSet与列表中的1000个SortedSets进行比较?我已经在这工作了两天,我的脑子很油腻大笑!

希望有意义!

2 个答案:

答案 0 :(得分:1)

是的,继续将用户号码放入SortedSet中,然后您可以使用以下方法查看故障单列表中的集合是否等于具有用户条目的集合。

SortedSet<int>.CreateSetComparer().Equals(userSet, objectSet);

要获取ID列表,您可以执行以下操作。

IEnumerable<int> GetMatchingSetIDs(SortedSet<int> userSet)
    {
        IEqualityComparer<SortedSet<int>> setComparer = SortedSet<int>.CreateSetComparer();
        foreach (Ticket ticket in tickets) //Where ticket is your ticket class with the sortedsets and tickets is a List of tickets.
        {
            if (setComparer.Equals(ticket.Set, userSet))
            {
                yield return ticket.ID;
            }
        }
    }

答案 1 :(得分:0)

如果我理解正确,那么你需要的是一个交集。

int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call Intersect extension method.
var intersect = array1.Intersect(array2);
// Write intersection to screen.
foreach (int value in intersect)
{
    Console.WriteLine(value);
}