Метод расширения TakeWhile
содержит следующий комментарий во всплывающей подсказке: «Индекс элемента используется в логике функции предиката». Обратите внимание, что эта всплывающая подсказка не видна в обычной всплывающей подсказке, а только во всплывающей подсказке списка intellisense для списков членов переменной sortedDictionary
.
Это именно то, что искали в сочетании с SortedDictionary
.
var first = sortedDictionary.First(kv => kv.Key.ToString().StartsWith(searchkey));
var last= sortedDictionary.Last(kv => kv.Key.ToString().StartsWith(searchkey));
var range = sortedDictionary.TakeWhile(kv => kv.Key.ToString().StartsWith(searchkey));
Предметы, первые и последние, найдены и исправлены, однако диапазон моей коллекции пуст.
Что здесь не так? Я ожидал диапазон со всеми предметами между первым и последним, включая их.
Я все еще могу найти диапазон, используя первый и последний, но TakeWhile
использует индекс, в то время как First
и Last
явно нет.
РЕДАКТИРОВАТЬ: «использование индекса» оказывается не имеет ничего общего с сортировкой, но вы можете использовать индекс в запросе. Например. когда я заменяю SortedDictionary
на SortedList
, я могу сделать:
int ix1 = sortedList.IndexOfKey(first.Key);
int ix2 = sortedList.IndexOfKey(last.Key);
var range = sortedList.SkipWhile((x, i) => i < ix1).TakeWhile((x, i) => i <= ix2);
Также с SortedDictionary
я могу сделать:
var range = sortedList.SkipWhile(x => !x.Key.ToString().StartsWith(searchkey))
.TakeWhile(x => x.Key.ToString().StartsWith(searchkey));
Мне нужно проверить, какой метод быстрее, а также проверить запрос Where.