С# Сортированный список: как получить следующий элемент?
Мне интересно, как получить следующий элемент в отсортированном списке С#. До сих пор я придумал следующий код:
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];