c# - 根据特定列从列表中删除重复行

标签 c#

我相信这类似于 this但我无法应用相同的解决方案。

我有一个包含几列的列表:

    public struct InfoForGraph
    {
        public float a{ get; set; }
        public double b{ get; set; }
        public double c { get; set; }
        public double d { get; set; }
        public double e { get; set; }
        public double f { get; set; }
        public double g { get; set; }
        public double h { get; set; }
        public double i { get; set; }
        public double j { get; set; }
    }

我想从此列表中删除重复的行,但前提是特定字段匹配。如果我对整个表执行不同操作,这些行将不会被删除。另外,我不在乎重复的行,我只想保留其中一行。

输入:

2.67|1.84|420|400|1608039|808|3117|1|2|3|4
2.68|1.84|420|401|1608039|808|3269|1|2|3|4

预期输出:

2.67|1.84|420|400|1608039|808|3117|1|2|3|4

因此,如果第 1,2,5,6,8,9,10 列具有相同的值,我应该只保留第一个返回(删除所有这些字段都匹配的第二个、第三个。)

有什么想法吗?

最佳答案

为简单起见,我缩小了条件范围,表示如果 InfoForGraph.bInfoForGraph.c 相等,则两个对象相等。您明白了想法并根据需要更改比较器。

public class InfoComparer : IEqualityComparer<InfoForGraph>
{
    public bool Equals(InfoForGraph x, InfoForGraph y)
    {
        if (x.b == y.b && x.c == y.c)
            return true;
        else
            return false;
    }

    public int GetHashCode(InfoForGraph obj)
    {
        unchecked
        {
            int hash = 17;
            hash = hash * 23 + obj.b.GetHashCode();
            hash = hash * 23 + obj.c.GetHashCode();
            return hash;
        }
    }
}

然后对其调用Distinct()

var unique = list.Distinct(new InfoComparer());

关于c# - 根据特定列从列表中删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45598482/

相关文章:

c# - 找不到 AsyncPostBackTrigger 的 ControlID

c# - 发布网站时有没有办法排除整个文件夹?

c# - .Net List<T> 插入

c# - 是否可以使用浏览器插件绕过 IE 中的 'open save save as' 对话框?

c# - windows phone中如何在页面之间传递多个数据

c# - 如何将我的 C# 程序作为计划任务运行

c# - 当对象实现 Equals 时,Newtonsoft.Json 序列化表现得很奇怪

c# - MongoDB C# 无法连接到数据库 : Unable to create an authenticator

C# Interfaces——只在其他接口(interface)中实现一个接口(interface)

c# - 如何获得在 webAPI 项目中公开的方法?