поэтому мне нужно удалить все записи в словаре в соответствии с указанной нижней границей.Eficient способ удалить все записи в словаре ниже заданного значения
Мое текущее решение заключается в следующем:
List<string> keys = new List<string>();
foreach (KeyValuePair<string, int> kvp in dic)
{
if (kvp.Value < lowerBound)
keys.Add(kvp.Key);
}
foreach (string key in keys)
dic.Remove(key);
Однако это довольно дорого, тем более, что размер словаря является довольно большим.
Я видел решение LINQ, как:
foreach(var kvp in dic.Where(kvp.Value <= lowerBound).ToDictionary())
{
dic.Remove(kvp.Key);
}
, который я предполагаю, что будет лучше, так как это только один Еогеасп, но я получаю:
Название «КВП» не существует в текущем контексте
Аргументы типа для метода 'System.Linq.Enumerable.Where (System.Collections.Generic.IEnumerable, System.Func)' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.
Я признаю, что я ничего не знаю о LINQ, поэтому любые идеи о том, как сделать это 2-е решение, или лучше?
Thnx заблаговременно
Если вы сделаете это удаление LowerBound часто, то, возможно, словарь не правильная структура для вас. – 2010-03-02 16:13:19
К счастью, мне просто нужно сделать это один раз. – brokencoding