Эффективный способ получить ряд ключей из словаря - PullRequest
4 голосов
/ 10 августа 2009

У меня есть Dictionary, что для большинства операций мне просто нужно извлечь одну запись по ключу, но для нескольких операций мне нужно будет работать с записями, связанными с диапазоном ключей. Мне приходит на ум способ использовать GetKeys и FindAll, которые будут соответствовать диапазону, который меня интересует, но мне было интересно, может ли кто-нибудь предложить лучший метод.

Ответы [ 3 ]

5 голосов
/ 10 августа 2009

A Dictionary, которая реализована в виде хэш-таблицы, не особенно подходит для эффективного выполнения операций выбора диапазона для клавиш. Вам нужно будет посетить все ключи, чтобы найти их все в указанном диапазоне. Хороший способ сделать это - запросить набор ключей с помощью простого выражения LINQ.

3 голосов
/ 26 августа 2010

A SortedList или SortedDictionary отсортирует элементы, так что вы можете попытаться получить ключ внизу своего диапазона, а затем пройти элементы к вершине вашего диапазона.

Использование бинарного поиска на SortedList даст вам индекс ключа, соответствующего нижней части вашего диапазона, или ближайшего более высокого значения. См. Как выполнить бинарный поиск по IList ?

1 голос
/ 10 августа 2009

Как вы сказали, найти все будет работать. Может быть что-то вроде;

dictionary.FindAll(entry => multipleStrings.Contains(entry.Key));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...