C# 实现Distinct将对象按条件去重

下面我来具体讲解“C# 实现Distinct将对象按条件去重”的完整攻略。这里我们假设有一组学生对象数据,每个学生对象包含学生的姓名和年龄两个属性,我们需要按照年龄去重,保留年龄较大的学生对象。攻略如下:

1. 定义学生类对象

首先,我们需要定义一个学生类对象,用于存储学生的姓名和年龄信息。

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

    public Student(string name, int age)
    {
        this.Name = name;
        this.Age = age;
    }
}

2. 实现自定义比较器

接下来,我们需要实现一个自定义的比较器,用于比较两个学生对象的年龄大小。

public class StudentAgeComparer : IEqualityComparer<Student>
{
    public bool Equals(Student x, Student y)
    {
        return x.Age == y.Age;
    }

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

3. 去重操作

最后,我们可以使用Linq的Distinct方法,将学生对象数组按照年龄去重得到新的学生对象数组。

Student[] students = new Student[]{
    new Student("张三", 20),
    new Student("李四", 21),
    new Student("王五", 20),
    new Student("赵六", 22),
    new Student("小七", 21),
};

Student[] distinctStudents = students.Distinct(new StudentAgeComparer()).ToArray();

上面的代码中,我们首先定义了一个学生对象数组,然后使用Distinct方法进行去重操作,指定了自定义的比较器StudentAgeComparer。最后将得到的去重后的学生对象数组转化为数组形式输出。

示例说明:

下面给出两个示例,直接调用完整代码实现。

示例1:将学生对象数组按照年龄去重,保留年龄较大的学生对象。

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

    public Student(string name, int age)
    {
        this.Name = name;
        this.Age = age;
    }
}

public class StudentAgeComparer : IEqualityComparer<Student>
{
    public bool Equals(Student x, Student y)
    {
        return x.Age == y.Age;
    }

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

class Program
{
    static void Main(string[] args)
    {
        Student[] students = new Student[]{
            new Student("张三", 20),
            new Student("李四", 21),
            new Student("王五", 20),
            new Student("赵六", 22),
            new Student("小七", 21),
        };

        Student[] distinctStudents = students.Distinct(new StudentAgeComparer()).ToArray();

        foreach (var student in distinctStudents)
        {
            Console.WriteLine($"Name: {student.Name} Age: {student.Age}");
        }

        Console.ReadKey();
    }
}

输出结果:

Name: 张三 Age: 20
Name: 李四 Age: 21
Name: 赵六 Age: 22

示例2:将商品对象数组按照名称和单价去重,保留单价较大的商品对象。

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }

    public Product(string name, decimal price)
    {
        this.Name = name;
        this.Price = price;
    }
}

public class ProductComparer : IEqualityComparer<Product>
{
    public bool Equals(Product x, Product y)
    {
        return x.Name == y.Name && x.Price == y.Price;
    }

    public int GetHashCode(Product obj)
    {
        return (obj.Name + obj.Price.ToString()).GetHashCode();
    }
}

class Program
{
    static void Main(string[] args)
    {
        Product[] products = new Product[]{
            new Product("Iphone 8 Plus", 6999.99m),
            new Product("Macbook Air", 8888.88m),
            new Product("Iphone 8 Plus", 8888.88m),
            new Product("Iphone X", 9999.99m),
            new Product("Iphone X", 18888.88m),
        };

        Product[] distinctProducts = products.Distinct(new ProductComparer()).ToArray();

        foreach (var product in distinctProducts)
        {
            Console.WriteLine($"Name: {product.Name} Price: {product.Price}");
        }

        Console.ReadKey();
    }
}

输出结果:

Name: Iphone 8 Plus Price: 8888.88
Name: Macbook Air Price: 8888.88
Name: Iphone X Price: 18888.88

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 实现Distinct将对象按条件去重 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • 程序中两个Double类型相加出现误差的解决办法

    针对程序中两个Double类型相加出现误差的解决办法,可以通过以下几个步骤进行解决: 问题分析 首先我们需要明确两个Double类型相加后产生误差的原因,对此进行分析,主要是由于Double类型其实是一种浮点数表示方法,整个数值是以二进制科学计数法表示的,因此它对于一些十进制的小数进行近似存储,就会出现误差。 解决办法 了解了原因,针对这个问题可以采取下面的…

    C# 2023年6月7日
    00
  • C#访问SQL Server数据库的实现方法

    下面就为您详细讲解“C#访问SQL Server数据库的实现方法”的完整攻略。整个攻略主要围绕以下几个方面展开: 连接SQL Server数据库 执行SQL语句 读取数据库数据 更新数据库数据 关闭数据库连接 接下来我们将依次对以上5点进行详细的说明。 连接SQL Server数据库 在C#中,我们可以通过 SqlConnection 类来连接 SQL Se…

    C# 2023年6月1日
    00
  • c# 区分几种定时器(timer)

    下面我来详细讲解一下 “C# 区分几种定时器(Timer)” 的攻略。 什么是定时器(Timer)? 在编程中,我们经常需要在特定的时间间隔或者在特定的时间点上执行某些指定的操作,这时就需要使用到定时器(Timer)了。定时器就是用来触发一段代码在一定时间间隔或者某个时间点上自动执行的工具。 在 C# 中,常用的定时器类型有 System.Windows.F…

    C# 2023年6月1日
    00
  • c#对list排序示例

    下面我来详细讲解一下c#对list排序的攻略。 如何对List排序 在C#中,可以在List类上使用Sort()方法对其进行排序。Sort()方法根据列表中的元素实现了IComparable泛型接口进行比较排序。默认情况下,它按照列表元素的值进行升序排序。 List<int> numList = new List<int>() { 5…

    C# 2023年6月1日
    00
  • asp.net 计算字符串中各个字符串出现的次数

    计算字符串中各个字符串出现的次数可以通过 Hash 表(Dictionary)来实现,同时可以利用正则表达式对字符串进行匹配。本攻略将根据输入的字符串 s,利用 Dictionary 统计各个字符串出现的次数,并给出两个示例说明。 步骤 1:导入命名空间 在代码文件中引入以下命名空间: using System.Collections.Generic; //…

    C# 2023年6月8日
    00
  • .Net Winform开发笔记(四)透过现象看本质

    接下来我将详细讲解“.Net Winform开发笔记(四)透过现象看本质”的完整攻略。 攻略概述 本篇攻略主要介绍如何透过现象看本质进行Winform开发,内容分为三个部分: 理解Winform的本质: 认识Winform的结构 理解Winform的生命周期 常用Winform控件的本质: 理解各种Winform控件的特点和用途 能够选择正确的控件实现需要的…

    C# 2023年5月31日
    00
  • C#使用Process类调用外部exe程序

    一、介绍 在使用C#进行编程的过程中,有时需要使用外部程序来进行特定的操作。在这种情况下,可以使用Process类进行操作。Process类是C#中用于启动外部进程的类,它允许我们创建、控制和执行操作系统中的进程,比如启动一个Windows应用程序或者调用另一个可执行文件。 二、基本用法 使用Process类调用外部exe程序的基本流程如下: 首先创建一个P…

    C# 2023年6月7日
    00
  • 详解ASP.NET MVC之下拉框绑定四种方式

    下面我将详细讲解ASP.NET MVC下拉框绑定四种方式的完整攻略。 一、前置知识 在进行下拉框绑定前,需要了解 ASP.NET MVC 的 Razor 语法和 C# 语言基础,以及了解下拉框的 HTML 语法和 ASP.NET MVC 中的 ViewData 和 ViewBag 这两种传值方式。 二、下拉框绑定四种方式 通过 ViewBag 绑定下拉框 在…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部