Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Убрать значения, которые повторяются в словаре

#c_sharp #net


У меня есть словарь:

IDictionary>

public class Dict
{ 
   public string Name { 
     get; 
     set;
   }
   public byte[] Data { 
     get; 
     set;
   }
}


У меня вопрос, как я могу исключить все повторяющиеся значения для поля Name во всем
словаре? Т.е. получается как бы делать фильтрацию словаря, при этом, все значения Value
которые повторяются, мне необходимо удалять. Т.е. если в ключе "Key1" и "Key2" в списке
есть поле Name с одинаковым значением, то необходимо исключить это значение для ключа.

Тестовые данные что-то вроде токого:

{"key1", {"NameОne", }, {"NameTwo", }}
{"key2", {"NameОne", }, {"NameFour", }}


Получиться должно это:

{"key1", {"NameОne", }, {"NameTwo", }}
{"key2", {"NameFour", }}

    


Ответы

Ответ 1



Вот пишешь пишешь ответ, а потом тебя опережают. Остаавлю свой вариант для галочки :) IDictionary> data = new Dictionary>(); data.Add("key1", new List { new Dict() { Name = "NameОne" }, new Dict() {Name="NameTwo"}}); data.Add("key2", new List { new Dict() { Name = "NameОne" }, new Dict() {Name="NameFour"}}); HashSet names = new HashSet(); foreach(var item in data) { item.Value.RemoveAll(i => !names.Add(i.Name)); }

Ответ 2



Ну например как-то так: HashSet usedNames = new HashSet(); foreach (List ld in collection.Values) { for (int i = 0; i < ld.Count; /* nothing */) { if (!usedNames.Add(ld[i].Name)) ld.RemoveAt(i); else i++; } } (Не нашёл изящного решения с LINQ.)

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

Отправить комментарий