#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
Ну например как-то так: HashSetusedNames = 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.)
Комментариев нет:
Отправить комментарий