Developers Planet

stephen reilly February 2016

how to calculate the number of common integers between two sorted sets

I need to count the number of integers between two sorted sets to determine if a lotto ticket is a winner. One sorted set being winningNumbers and the other ticketNumbers. I was told there is a intersect function but I cannot find a function to achieve the required results. Ideally I would like a function that returns an int representing the number of common integers between the sets.

Tim Schmelter February 2016

Even if it's not sorted this works:

``````IEnumerable<int> winning = winningNumbers.Intersect(ticketNumbers);
int countOfWinningNumbers = winning.Count();
``````

If you want to process it further it would be better to create a collection:

``````List<int> winningList = winning.ToList();
int countOfWinningNumbers = winningList.Count;
``````

Since you've asked explicitly for a `SortedSet` approach, using `SortedSet.IntersectWith` might be more efficient(O(n)) but modifies the source set:

``````SortedSet<int> winningNumbers = new SortedSet<int> { 2, 3, 7 };
SortedSet<int> ticketNumbers = new SortedSet<int> { 1, 2, 3, 4, 5 };

ticketNumbers.IntersectWith(winningNumbers);  // now ticketNumbers contains only 2 and 3
``````