I can't remember where I found the original c# version of this. I can't take credit for the logic, I merely converted it to VB.Net and used it in my app, and it works great. I did alter it a little but only to use StringCollection object since it fit into my other code nicer.
I had a need to find the missing numbers in a sequence. I had used SQL to try and perform this task and had found something that worked great, until I realized it didn't work when two consecutive numbers were missing. Then it would only list one of those. So instead I had used VB.Net to get me the missing numbers.
1) Create a comma delimited list of the numbers in the sequence
2) Send it to the function and return back a StringCollection object
The object returned will only have the missing numbers, if any.
''' Returns the missing numbers in a sequence.
''' </summary>
''' <param name="strNumbers">Expects a string of comma-delimited numbers. ex: "1,2,4,6,7"</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function FindMissingNumbers(ByVal strNumbers As String) As StringCollection
Dim MissingNumbers As New StringCollection
Dim arNumbers() As String
arNumbers = Split(strNumbers, ",")
arNumbers = SortNumbers(arNumbers)
For I = 0 To UBound(arNumbers) - 1
If CLng(arNumbers(I)) + 1 <> CLng(arNumbers(I + 1)) Then
For J = 1 To (CLng(arNumbers(I + 1)) - CLng(arNumbers(I))) - 1
MissingNumbers.Add(CStr(CLng(arNumbers(I)) + J))
Next
End If
Next
Return MissingNumbers
End Function
''' <summary>
''' Sorts the array of numbers in value order, least to greatest.
''' </summary>
''' <param name="arNumbers">Send in a string() array of numbers</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function SortNumbers(ByVal arNumbers() As String) As String()
Dim tmpNumber As String
For J = 0 To UBound(arNumbers) - 1
For I = J + 1 To UBound(arNumbers)
If arNumbers(I) - arNumbers(J) < 0 Then
tmpNumber = arNumbers(J)
arNumbers(J) = arNumbers(J)
arNumbers(I) = tmpNumber
End If
Next
Next
Return arNumbers
End Function
So there you go. The FindMissingNumbers calls the SortNumbers, notice it's Private. You can call FindMissingNumbers and get back your Missing Numbers.