ConcurrentDictionary — Как эффективно «получить N элементов, начиная с ключа K»?C#

Место общения программистов C#
Ответить
Anonymous
 ConcurrentDictionary — Как эффективно «получить N элементов, начиная с ключа K»?

Сообщение Anonymous »

Ситуация следующая:
  • У меня есть ConcurrentDictionary
  • Для эффективное разбиение по страницам, мы хотим реализовать "получить N элементов, начиная с ключа K"
Лучший подход, который я придумал было:

Код: Выделить всё

public IEnumerable Get( TId fromKey, int count )
{
// parameter validation left out for brevity

return items.Keys // KeyCollection of the Dictionary, please assume 'items' is a class field
.SkipWhile(key => key != fromKey)
.Take(count)
.Select(x => items[x])
.ToList();
}
Но это действительно неправильно. Тем более, что мы явно не хотим «SkipWhile».
Если бы я мог пропустить, я мог бы просто выполнить .Skip(n).Take(m) для Значения, но это явно не требуется. Для меня требование: начиная с клавиши K, вернуть N элементов.
Может быть, я слишком много думаю об этом и мне следует отступить. Но у меня такое ощущение, что я здесь что-то упускаю.
Поэтому мой вопрос: Есть ли способ сделать это без необходимости «пропускать» в KeyCollection или ValueCollection словаря?

ИЗМЕНИТЬ
  • Код: Выделить всё

    ConcurrentDictionary
    — здесь я взял задачу. Сохранение этого Типа не высечено в камне.
  • Порядок не является приоритетом. Пожилые люди и ПО считают это «достаточно хорошим», чтобы следовать любому порядку, полученному из KeyCollection. Но об этом стоит помнить при рассмотрении возможных запросов на новые функции в будущем.


Подробнее здесь: https://stackoverflow.com/questions/662 ... ts-startin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»