Фильтровать списки, являющиеся значениями словаря

#c#

Вопрос:

 Dictionary<int, List<int>> foo = GetFoo();
foreach (var (key, items) in foo)
{
    items = items.Where(item => item % 2 == 0); // unfortunately not in-place
    foo[key] = items; // unfortunately breaks iterator
}
 

У меня есть ключи сопоставления словаря со списками целых чисел { key: [ 1, 2, 3, ... ] }

Как я могу отфильтровать значения словаря? Я хочу получить { key: [2, 4, ...] } , например.

Ответ №1:

Использование RemoveAll , которое принимает Predicate<T> :

 foreach (var items in foo.Values)
{
    items.RemoveAll(item => item % 2 == 0);
}
 

Комментарии:

1. Вы можете просто использовать цикл for, не прерывая итератор.

2. этот ответ не будет прерывать итератор, потому что он удаляется из списка, а не из словаря.

Ответ №2:

Выполните итерацию по всем ключам и установите отфильтрованный список для текущего ключа.

 foreach (var key in foo.Keys.ToList())
{
    foo[key] = foo[key].Where(item => item % 2 == 0).ToList();
}