Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

sortedlist

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

like image 580
Boris Avatar asked Nov 11 '11 07:11

Boris


2 Answers

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

like image 105
Scott Rippey Avatar answered Sep 20 '22 17:09

Scott Rippey


SortedList can be accessed by both key and index

var IndexOfKey = mList.IndexOfKey(key);

Increment the index,

IndexOfKey++; //Handle last index case

Get the next item by index.

var nextElement = mList.GetByIndex(IndexOfKey);
like image 33
parapura rajkumar Avatar answered Sep 17 '22 17:09

parapura rajkumar