Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除列表C中具有相同密钥的项#_C#_List_Removeall - Fatal编程技术网

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();