Есть Dictionary, к примеру
IDictionary<string, List<Model>>
есть модель
public class Model
{
public string Name { get; set;}
public byte[] Data { get; set;}
}
Как можно исключить повторяющиеся значения для Name во всем Dictionary? Отфильтровать существующий словарь. Повторяющиеся значения Value необходимо удалять. Т.е. если в ключе "Key1" и в ключе "Key2" в списке есть Name с одинаковым значением, то необходимо исключить это значение для ключа (не важно какого)
тестовые данные
{"key1", {"Name1", <data>}, {"Name2", <data>}, {"Name3", <data>}}
{"key2", {"Name4", <data>}, {"Name2", <data>}, {"Name5", <data>}}
результат
{"key1", {"Name1", <data>}, {"Name2", <data>}, {"Name3", <data>}}
{"key2", {"Name4", <data>}, {"Name5", <data>}}
или
{"key1", {"Name1", <data>}, {"Name3", <data>}}
{"key2", {"Name4", <data>}, {"Name2", <data>}, {"Name5", <data>}}
HashSet<string> uniqueNames = new HashSet<string>();
foreach (KeyValuePair<string, List<Model>> pair in dict)
{
foreach (Model model in pair.Value.ToList())
{
if (!uniqueNames.Add(model.Name))
{
pair.Value.Remove(model);
}
}
}
Как развитие ответа Ruslan Artamonov. Чтобы не копировать список только ради того чтоб его перебрать - можно воспользоваться методом RemoveAll:
HashSet<string> uniqueNames = new HashSet<string>();
foreach (KeyValuePair<string, List<Model>> pair in dict)
{
pair.Value.RemoveAll(model => !uniqueNames.Add(model.Name));
}
Этот способ работает быстрее на длинных списках (тот ответ имел квадратичную сложность относительно длины списка - этот имеет линейную сложность).
Но если длинных списков не предполагается - лучше использовать простой вложенный цикл ради читаемости кода.
Виртуальный выделенный сервер (VDS) становится отличным выбором
В форме есть DropDownList и CheckBoxList Значение в DropDownList должен меняться в зависимости от выбора CheckBoxList Поместил оба элемента в UpdatePanelЗначение в DropDownList...
Каким образом бот может упоминать пользователей, у которых нет никнейма?
Создаю SecurityToken с помощью Saml2SecurityToken следующим образом: