Хотя это будет SQL-эквивалент сканирования таблицы, вы можете использовать LINQ или методы расширения IEnumerable<T>
для поиска в вашем словаре всех значений, ключи которых соответствуют шаблону:
Метод расширения:
var values = dictionary.Where(pv =>
pv.Key.StartsWith("A") ||
(pv.Key.Length >= 3 && pv.Key[2] == 'e') ||
pv.Key.Length < 4 ||
pv.Key[3] != 'd').Select(pv => pv.Value);
LINQ:
var values = (from pv in dictionary
where pv.Key.StartsWith("A") ||
(pv.Key.Legnth >= 3 && pv.Key[2] == 'e') ||
pv.Length < 4 ||
pv.Key[3] != 'd'
select pv.Value);
Обратите внимание, что последняя часть обоих этих предикатов относится к вашей "четвертой букве не" d ". Я понял, что это означает, что строкаэто будет соответствовать длине в три символа (или меньше). Если вы имеете в виду, что строка содержит не менее четырех символов И ее четвертый символ не равен "d", то изменения должны быть очевидны.
Помните, что основной (преимущество) для класса Dictionary
заключается в использовании поиска ключей на основе хеша, который (в среднем и лучшем случае) равен O (1). При использовании линейного поиска, подобного этому, O (n), поэтому что-то вроде этого будет,как правило, медленнее, чем обычный поиск ключей.