c# ienumerable 删除计数 > 1 的元素

问题描述 投票:0回答:1

我有一个可枚举的记录,有时记录会具有相同的名称..所以我想从中删除一个。

例如名称是:“Prag1”

所以现在我首先想检查在 ienumerable 中是否有多个元素的名称为:“Prag1”

如果是,那么我想删除一个元素并保留另一个元素。

我已经尝试过这个但不适合我..

data.ToList().Remove(data.ToList().Find(x => x.Name == "Prag1));

更新: Distinct 对我不起作用,因为在我的列表中还有一个名为 Date 的字段,并且它的值会有所不同。

因此,如果 Company1 中的第一个记录日期是 11 月 15 日,那么现在第二个记录日期将是 11 月 22 日

c# asp.net asp.net-core asp.net-web-api ienumerable
1个回答
0
投票

根据我的说法,将 IEnumerable 转换为 List 将是修改集合的一种方法。

请参考以下示例实现:

var list = data.ToList(); 
var seenNames = new HashSet<string>(); 

for (int i = list.Count - 1; i >= 0; i--)
{
    if (seenNames.Contains(list[i].Name))
    {
        list.RemoveAt(i); 
    }
    else
    {
        seenNames.Add(list[i].Name); 
    }
}

IEnumerable<T> result = list.AsEnumerable();

如果不需要修改原始集合,您还可以使用 LINQ 创建具有唯一元素的新集合:

var uniqueData = data.GroupBy(x => x.Name)
                     .Select(g => g.First());
© www.soinside.com 2019 - 2024. All rights reserved.