С# Сортированный список: как получить следующий элемент?

Мне интересно, как получить следующий элемент в отсортированном списке С#. До сих пор я придумал следующий код:

SortedList<int, Bla> mList;

Bla someElement = mList[key];
Bla next        = mList[mList.Keys[mList.IndexOfKey(key) + 1]];

Я не уверен, что это самый умный способ сделать это; -)

Ответ 1

Поскольку вы можете получить доступ к SortedList с помощью index (см. раздел "Примечания" ), я бы рекомендовал использовать следующее:

var index = mList.IndexOfKey(key);
var first = mList.Values[index];
var second = mList.Values[index + 1];

Это будет работать в том же O(log n) как один поиск.

Здесь также используется способ LINQ:

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

Это будет только один раз. Он будет выполняться в O(n).

Ответ 2

SortedList можно получить доступ как по ключу, так и по индексу

var IndexOfKey = mList.IndexOfKey(key);

Увеличить индекс,

IndexOfKey++; //Handle last index case

Получить следующий элемент по индексу.

var nextElement = mList.GetByIndex(IndexOfKey);

Ответ 3

Использовать перечислитель:

 IDictionaryEnumerator iterator = mList.GetEnumerator();
 iterator.MoveNext();
 Bla first = iterator.Value;
 iterator.MoveNext();
 Bla next = iterator.Value;

Ответ 4

SortedList<int, Bla> mList;
int key = 0;
Bla someElement = mList.Values[key];

...
key = 1;
Bla next        = mList.Values[key];