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日

相关文章

  • C# 设置Chart的X轴为时间轴​​​​​​​详情

    下面我为您详细讲解一下“C# 设置Chart的X轴为时间轴”的完整攻略,过程中包含两条示例。 前置知识 在了解如何设置Chart的X轴为时间轴之前,您需要掌握以下知识: C#语言基础 Chart控件使用基础 时间格式化 设定X轴为时间轴 Chart控件中的轴(Axis)类物件,其中有多种轴如X轴、Y轴以及二级轴等等,而控制X轴显示类型的属性有AxisType…

    C# 2023年5月15日
    00
  • c#中分割字符串的几种方法

    当在c#中需要对字符串进行分割时,有多种方法可供选择,包括使用Split方法、正则表达式、Substring方法等等。下面将具体介绍这些方法的使用。 使用Split方法 Split方法是最简单的分割方法,它可以根据指定的字符或字符串将原字符串拆分成一个字符串数组。 语法如下: string[] result = originalString.Split(ne…

    C# 2023年6月7日
    00
  • C#中ExecuteNonQuery()返回值注意点分析

    针对C#中ExecuteNonQuery()返回值注意点,我为大家准备了以下完整攻略: 1. ExecuteNonQuery()方法的用途 ExecuteNonQuery()方法在C#中是通过SqlConnection对象执行SQL语句的方法之一,它主要用于执行不返回数据集的SQL语句,比如INSERT、UPDATE、DELETE等操作,即执行非查询语句。在…

    C# 2023年5月14日
    00
  • C#实现大数字运算的实例代码

    C#实现大数字运算的实例代码攻略 什么是大数字运算 大数字运算是指对于超过计算机所能直接表示的数字,可以通过算法实现运算。在C#中,数字类型有限,当数字过大时,计算结果可能会溢出或者得出错误的结果。为了解决这种问题,需要用大数字运算方式来处理。 C#中的大数字运算 C#中提供了BigInteger结构和BigDecimal类,可以用于大数字运算。在进行大数字…

    C# 2023年6月7日
    00
  • Entity Framework导航属性介绍

    Entity Framework导航属性介绍 什么是导航属性 在EF中,导航属性是描述两个实体之间关系的属性。例如,一个订单实体和一个客户实体之间的关系就可以通过导航属性进行描述。 如何使用导航属性 导航属性有两种方式进行访问:延迟加载和显示加载,下面我将对这两种方式进行详细的说明。 延迟加载 代码示例: using(var context = new My…

    C# 2023年6月3日
    00
  • C#调用动态库

    C#调用动态库是一种常见的操作,可以让我们在开发的过程中更加灵活。下面是一个详细的攻略,包含了基本概念、实际应用、代码示例等。 基本概念 在讲解C#调用动态库之前,有几个基本概念需要先了解一下: 动态链接库:一种特殊的库,不像静态链接库那样包含在可执行文件中,而是在程序运行时才会加载,也称为共享库。 调用规范:在C函数传递参数的过程中,有多种规范,包括std…

    C# 2023年5月14日
    00
  • C# DataTable中Compute方法用法集锦(数值/字符串/运算符/表等操作)

    C# DataTable中Compute方法用法集锦 DataTable的Compute方法提供了一种简便的方式,允许在DataTable中进行多种类型的计算。本文主要介绍该方法的用法集锦,包括数值计算、字符串操作、运算符、表操作以及自定义函数等方面的操作。 数值计算 Compute方法可以对包含数值的DataTable进行计算。以下面的表格为例,介绍相关的…

    C# 2023年5月15日
    00
  • C#使用BackgroundWorker控件

    下面是关于C#使用BackgroundWorker控件的完整攻略。 什么是BackgroundWorker控件? BackgroundWorker控件是C#中一种用于在后台执行操作的控件。它提供了一个简单的方法来执行长时间运行的任务而不会阻塞用户界面。它可以非常方便地执行异步操作,如下载或计算密集型任务等。 如何使用BackgroundWorker控件? 使…

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