C# 按优先级删除重复项

C# 按优先级删除重复项,c#,list,linq,duplicates,C#,List,Linq,Duplicates,我有一个包含id和优先级的类列表,如下所示: 此列表可以包含许多条目,其中一些条目可以重复 如果列表中已经存在id,我需要选择优先级最高的id。在本例中,前两个条目具有相同的Id,但优先级不同。因此,优先级较低的一个必须从列表中排除 有人给我提建议吗?非常感谢。您可以使用GroupBy,然后按优先级对每组进行排序,并选择第一个: var highPrioUniqueItemList = listmembers .GroupBy(x => x.id) .Select(g =

我有一个包含id和优先级的类列表,如下所示:

此列表可以包含许多条目,其中一些条目可以重复

如果列表中已经存在id,我需要选择优先级最高的id。在本例中,前两个条目具有相同的Id,但优先级不同。因此,优先级较低的一个必须从列表中排除


有人给我提建议吗?非常感谢。

您可以使用
GroupBy
,然后按优先级对每组进行排序,并选择第一个:

var highPrioUniqueItemList = listmembers
    .GroupBy(x => x.id)
    .Select(g => g.OrderByDescending(x => x.priority).First())
    .ToList();

有两种可能的方法:

class Program
{
    static void Main(string[] args)
    {
        Guid guid1 = Guid.NewGuid();
        List<Item> items = new List<Item>()
        {
            new Item
            {
                ID = guid1,
                Priority = 1
            },
            new Item
            {
                ID = guid1,
                Priority = 2
            },
            new Item
            {
                ID = guid1,
                Priority = 3
            },
            new Item
            {
                ID = Guid.NewGuid(),
                Priority = 1
            },
            new Item
            {
                ID = Guid.NewGuid(),
                Priority = 2
            },
            new Item
            {
                ID = Guid.NewGuid(),
                Priority = 3
            },
        };

        //IF YOU CAN CHANGE THE LIST
        items = items.GroupBy(x => x.ID).Select(x => x.OrderByDescending(y => y.Priority).First()).ToList();

        //IF YOU CAN CHANGE ONLY LIST ITEMS
        items.RemoveAll(z => items.GroupBy(x => x.ID).SelectMany(x => x.OrderByDescending(y => y.Priority).Skip(1).ToList()).ToList().Contains(z));
    }
}
public class Item
{
    public Guid ID { get; set; }
    public int Priority { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
Guid guid1=Guid.NewGuid();
列表项=新列表()
{
新项目
{
ID=guid1,
优先级=1
},
新项目
{
ID=guid1,
优先级=2
},
新项目
{
ID=guid1,
优先级=3
},
新项目
{
ID=Guid.NewGuid(),
优先级=1
},
新项目
{
ID=Guid.NewGuid(),
优先级=2
},
新项目
{
ID=Guid.NewGuid(),
优先级=3
},
};
//如果你能改变名单
items=items.GroupBy(x=>x.ID);
//如果您只能更改列表项
items.RemoveAll(z=>items.GroupBy(x=>x.ID)。选择many(x=>x.OrderByDescending(y=>y.Priority)。跳过(1.ToList()).ToList().Contains(z));
}
}
公共类项目
{
公共Guid ID{get;set;}
公共int优先级{get;set;}
}

GroupBy-Id、order-by-Priority、Take-one非常感谢……我自己可能会想到:)