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