C# Sorted list: How to get the next element?

Boris picture Boris · Nov 11, 2011 · Viewed 18.4k times · Source

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 ;-)

Answer

Scott Rippey picture Scott Rippey · Nov 11, 2011

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).