Как я могу удалить те же значения, разделенные запятыми, из списка, используя c # linq - PullRequest
0 голосов
/ 15 октября 2018

У меня есть AC # Список продуктов:

var mylist = new List<Person>{
   new Product{Id=1, Name="p-1", Colors="1,2"},
   new Product{Id=2, Name="p-2", Colors="2,1"},
   new Product{Id=3, Name="p-2", Colors="3,4,5"},
   new Product{Id=4, Name="p-2", Colors="4,5,3"}
}

Если цвет продукта "1,2", а другой цвет продукта - "2,1", эти продукты имеют одинаковые цвета.Поэтому я хочу удалить один из них (что не имеет значения).Окончательный список будет выглядеть так:

var mylist = new List<Person>{
   new Product{Id=1, Name="p-1", Colors="1,2"},
   new Product{Id=3, Name="p-2", Colors="3,4,5"}
}

Я не могу удалить продукты того же цвета из списка, используя c # linq.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я добавил одно свойство типа string[] в классе person, чтобы было проще.Эти разделенные запятыми значения бесполезны, поэтому это свойство будет полезно и в дальнейшей обработке.

        var persons = new List<Person>{
                                       new Person{Id=1, Name="p-1", Colors="1,2"},
                                       new Person{Id=2, Name="p-2", Colors="2,1"},
                                       new Person{Id=3, Name="p-2", Colors="3,4,5"},
                                       new Person{Id=4, Name="p-2", Colors="4,5,3"}
                                    };

        persons.ForEach(x => x.ColorList = x.Colors.Split(','));

        var distinctPerson = new List<Person>();
        foreach (var item in persons)
        {
            var isExist = distinctPerson.Any(x => x.ColorList.Intersect(item.ColorList).Any());
            if(!isExist)
            {
                distinctPerson.Add(item);
            }
        }
0 голосов
/ 15 октября 2018

Вы можете разделить и отсортировать цвета, сгруппировать их, и, поскольку вы говорите, что не важно, кто может получить первое из каждой группы (я полагаю, список был опечаткой):

var mylist = new List<Product>{
    new Product{Id=1, Name="p-1", Colors="1,2"},
    new Product{Id=2, Name="p-2", Colors="2,1"},
    new Product{Id=3, Name="p-2", Colors="3,4,5"},
    new Product{Id=4, Name="p-2", Colors="4,5,3"}
    };

var result = mylist
    .GroupBy(m => string.Join(",",m.Colors.Split(',').Select(c => c.Trim()).OrderBy(c => c)))
    .Select(m => new Product {
        Id=m.First().Id, 
        Name=m.First().Name, 
        Colors=m.Key});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...