C#实现按条件对对象去重的distinct方法

分类:知识百科 日期: 点击:0

在C#中,distinct方法可以用来对集合中的对象进行去重,它可以根据指定的条件来去重,而不是比较对象本身。

distinct方法的语法如下:

IEnumerable Distinct(IEnumerable source, IEqualityComparer comparer);

其中,source参数表示要去重的对象集合,comparer参数表示比较器,它是一个实现了IEqualityComparer接口的类,用于指定distinct方法如何比较两个对象是否相等。

下面是一个使用distinct方法实现按条件对对象集合去重的示例:

class Program
{
    static void Main(string[] args)
    {
        var list = new List
        {
            new Student { ID = 1, Name = "Tom" },
            new Student { ID = 2, Name = "Tom" },
            new Student { ID = 3, Name = "Jim" },
            new Student { ID = 4, Name = "Jim" },
            new Student { ID = 5, Name = "Jim" },
        };

        // 去重,只保留Name相同的对象
        var distinctList = list.Distinct(new StudentComparer());

        foreach (var student in distinctList)
        {
            Console.WriteLine($"ID:{student.ID},Name:{student.Name}");
        }

        Console.ReadKey();
    }
}

public class Student
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class StudentComparer : IEqualityComparer
{
    public bool Equals(Student x, Student y)
    {
        return x.Name == y.Name;
    }

    public int GetHashCode(Student obj)
    {
        return obj.Name.GetHashCode();
    }
}

上面的示例中,使用distinct方法对Student对象集合进行去重,只保留Name相同的对象。为了指定distinct方法如何比较两个对象是否相等,我们实现了一个StudentComparer类,它实现了IEqualityComparer接口,并且重写了Equals和GetHashCode方法,指定distinct方法按照Name属性来比较两个对象是否相等。

运行上面的示例代码,可以看到distinct方法只保留了Name相同的对象,其他的对象都被去重了:

ID:1,Name:Tom
ID:3,Name:Jim

从上面的示例代码可以看出,distinct方法可以根据指定的条件来去重,而不是比较对象本身。

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。