Удаление идентичных элементов в Dictionary

331
03 сентября 2017, 00:40
Dictionary(int key,list<x> y)

В y есть элементы name Если y.name != ключу в котором лежит лист, то удали этот элемент из листа.
Нужно сделать пробег по всему Dictionary. Я пробовал foreach,но он ругается на то, что, когда удаляешь элемент листа, пишет что лист модифицирован.

Answer 1

Ещё один вариант, в функциональном стиле:

dict = dict.Where(item => item.Key == item.Value.name)
           .ToDictionary(item => item.Key, item => item.Value);

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

При этом вы подменяете объект, так что те, у кого была своя ссылка на ваш объект, будут работать со старой версией словаря. Это может быть то или не то, что вы хотите, в зависимости от того, как устроена ваша программа. (Например, если другие пользователи вашего словаря работают с ним, они могут не рассчитывать на то, что словарь поменяется.)

Answer 2
public class list
{
  public int name { get; set; }
}
Dictionary<int, list> dict = new Dictionary<int, list>();
dict[1] = new list() { name = 100 };
dict[2] = new list() { name = 2 };
dict[3] = new list() { name = 300 };
foreach (var mismatch in dict.Where(item => item.Key != item.Value.name).ToList())
{
  dict.Remove(mismatch.Key);
}
READ ALSO
Ошибка при компиляции С# проекта в IDE Rider на Ubuntu

Ошибка при компиляции С# проекта в IDE Rider на Ubuntu

Использую фреймворк для кросс-платформенных программ EtoForms

379
Как получить список из двух JSON объектов

Как получить список из двух JSON объектов

Здравствуйте, подскажите пожалуйста, у меня есть два JSON объекта

603
listbox переместить выделение на последний элемент

listbox переместить выделение на последний элемент

Необходимо сделать пролистывание ListBox в самый низДелаю при инициализации окна:

332