C# 删除列表C中具有相同密钥的项#
我有一个C# 删除列表C中具有相同密钥的项#,c#,list,removeall,C#,List,Removeall,我有一个列表n对象。 在n个对象中,有一些对象具有相同的Id。 示例List={t1,t2,t3,t4,t5….,t10}。 假设: t1.Id=t5.Id 所以我想从列表中删除t5 谁能帮我 在这个问题中:您知道对象重复(例如:“bob”),但在我的问题中,在这个列表中,我以前不知道有任何对象重复。仅使用LINQ来复制对象: source = source.GroupBy(t => t.id).Select(g => g.First()).ToList(); 您可以使用(从NuG
列表
n对象
。
在n个对象中,有一些对象具有相同的Id
。
示例List={t1,t2,t3,t4,t5….,t10}。
假设:
t1.Id=t5.Id
所以我想从列表中删除t5
谁能帮我
在这个问题中:您知道对象重复(例如:“bob”),但在我的问题中,在这个列表中,我以前不知道有任何对象重复。仅使用LINQ来复制对象:
source = source.GroupBy(t => t.id).Select(g => g.First()).ToList();
您可以使用(从NuGet获取)扩展名DistinctBy
var result = list.DistinctBy(x => x.Id).ToList();
试试这个:
list.RemoveAll(input => list.Count(i => i.Id == input.Id) > 1);
你试过什么办法来解决你的问题吗?首先展示你的努力。你可能想看看,除非你的家庭作业/作业绝对要求你使用列表
。我是LINQ的新手。我尝试使用2 for循环,但是这个解决方案没有优化。如果您需要最佳解决方案:这种问题最好使用字典(如上所述)来解决。字典
不允许您使用同一个键添加多个数据,并且可以非常快速地从我这里找到一个键。+1。同样正确的是,如果您没有足够的懒惰来使用现有的实现)@lazyberezovsky,我认为通过调用加载整个moreLinq
只为一个DistinctBy进行汇编可能是一种过分的做法。这就是为什么我把LINQ发布到只回答第一个问题的对象上。哇。你是对的,没有明显的(谓词)。当然应该有。我之所以认为是因为我创建了我自己的:D go figure。什么是downvote的原因?我没有downvote,但没有理由Distinct
会选择第一个,因为它是使用哈希集或类似方法实现的。因为他特别要求删除t5
,所以您需要保证这一点。这是我最初的反应。不知道这是否就是你被否决的原因。事实上,这对于来说显然不是真的。也许这并不是否决投票的原因。@LasseV.Karlsen被描述为如果一个键被多次看到,则只返回带有该键的第一个元素。
@LasseV.Karlsen您可以查看,它将返回第一个元素。
var res = items.GroupBy(item => item.Id).Select(item2 => item2.First()).ToList();