2016-02-19 57 views
1

所以在我的程序中,我有一个带有1000个票据对象的列表。每个对象都有一个int ID和一个6个数字的int SortedSet。我希望用户能够输入六个数字,并将这6个数字与列表中1000个对象的每个对象中的六个数字进行比较。如果数字匹配,我想要输出对象的ID。什么是实现这一目标的最佳方式?我是否应该将用户输入的6个数字也放入SortedSet中?那正是我想要做的。如果是这样,我如何将SortedSet与列表中的1000个SortedSet中的每一个进行比较?我一直在为此工作两天,而我的头也在炒大声笑!C#如何比较两个有序集?

希望有道理!

+3

你可以显示你的尝试代码? – Vikhram

+1

你有试过什么吗?您可以考虑为采用排序集,列表或任何其他存储数字的对象编写比较函数。 – Jacobr365

+1

[C#SortedSet and equality]的可能重复(http://stackoverflow.com/questions/8604149/c-sharp-sortedsett-and-equality) – Trasiva

回答

0

是的,继续并将用户号码放入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; 
      } 
     } 
    } 
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); 
}