I'm wondering how to get the next element in a C# sorted list. SO far I've come up with the following code:
SortedList<int, Bla> mList;
Bla someElement = mList[key];
Bla next = mList[mList.Keys[mList.IndexOfKey(key) + 1]];
I'm not sure if that's the smartest way to do it ;-)
Since you can access a SortedList
by index (see the Remarks section), I'd recommend using the following:
var index = mList.IndexOfKey(key);
var first = mList.Values[index];
var second = mList.Values[index + 1];
This will work in the same O(log n)
as a single lookup.
Here's also the LINQ way to do it:
var items = mList.SkipWhile(m => m.Key != key).Select(m => m.Value).Take(2).ToList(); // Avoid double-enumeration by calling ToList
var first = mList[0];
var second = mList[1];
This will only enumerate once. It will execute in O(n)
.