I knew that LINQPad was good, but hadn’t realised that in addition to LINQ proper, one can write whole programs, complete with generics:
Function Rank(Of T As {IComparable(Of T)})(items As IEnumerable(Of T), item As T) As Integer Dim ranked = From i In items Order By i Select New With { .key = i, .ranking = (From r In items Where r.CompareTo(i) < 0).Count + 1} Return (From i In ranked Where i.key.CompareTo(item) = 0 Select i.ranking).Single End Function Sub Main() Dim l As New list(Of Integer) From {9, 1, 3, 8, 4, 6} Dim r As Integer = rank(Of Integer)(l, 6) console.write("6 is the " & r & "th element of ") For Each n As Integer In l.orderby(Function(x) x) console.write(n & " ") Next console.writeline() End Sub
which correctly prints
6 is the 4th element of
1 3 4 6 8 9
To say that I’m impressed is a vast understatement.