Отфильтровывание ценностей из Универсального Словаря C#

У меня есть словарь C#, Dictionary<Guid, MyObject> то, что я должен быть фильтрован на основе собственности MyObject.

Например, я хочу удалить все отчеты из словаря где MyObject.BooleanProperty = false. Каков лучший способ достигнуть этого?

62
задан Fiona - myaccessible.website 25 January 2010 в 10:38
поделиться

3 ответа

С момента словаря. IENumerable IENumerable > , вы можете просто использовать где :

var matches = dictionary.Where(kvp => !kvp.Value.BooleanProperty);

, чтобы воссоздать новый словарь, если вам это нужно, используйте ТОГИМАЛЬНЫЙ метод.

61
ответ дан 24 November 2019 в 16:37
поделиться

Если вы не заботитесь о создании нового словаря с нужными элементами и выбросить старый, просто попробуйте:

dic = dic.Where(i => i.Value.BooleanProperty)
         .ToDictionary(i => i.Key, i => i.Value);

, если вы не можете создать новый словарь и надо Измените старую по какой-то причине (вроде бы, когда он снаружи ссылается, и вы не можете обновить все ссылки:

foreach (var item in dic.Where(item => !item.Value.BooleanProperty).ToList())
    dic.Remove(item.Key);

Обратите внимание, что здесь необходимо TOLIST , поскольку вы изменяете основную коллекцию. Если вы измените Основная коллекция, перечислитель, работающий над этим, чтобы запросить значения, будет неиспользуемым и выброс исключение в следующей итерации цикла Tolist , кэширует значения, прежде чем изменять словарь вообще.

92
ответ дан 24 November 2019 в 16:37
поделиться
-

Вы можете просто использовать LINQ , где предложение:

var filtered = from kvp in myDictionary
               where !kvp.Value.BooleanProperty
               select kvp
7
ответ дан 24 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: