C# 使用 LINQ 删除 List 中重复名称的元素,保留最新的日期

本文将介绍如何使用 C# 和 LINQ 从 List 中删除重复的姓名,并保留具有最新日期的元素。

示例代码:

using System;
using System.Collections.Generic;
using System.Linq;

public class Student
{
    public string Name { get; set; }
    public DateTime Date { get; set; }
}

public class Program
{
    public static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = 'Alice', Date = new DateTime(2022, 1, 1) },
            new Student { Name = 'Bob', Date = new DateTime(2022, 2, 1) },
            new Student { Name = 'Alice', Date = new DateTime(2022, 3, 1) },
            new Student { Name = 'Charlie', Date = new DateTime(2022, 4, 1) },
            new Student { Name = 'Bob', Date = new DateTime(2022, 5, 1) },
            new Student { Name = 'Alice', Date = new DateTime(2022, 6, 1) }
        };

        var result = students
            .GroupBy(s => s.Name)
            .Select(g => g.OrderByDescending(s => s.Date).First())
            .ToList();

        students.RemoveAll(s => !result.Contains(s));

        foreach (var student in students)
        {
            Console.WriteLine($'Name: {student.Name}, Date: {student.Date}');
        }
    }
}

代码说明:

  1. 首先,我们创建了一个包含学生信息的列表 students
  2. 使用 LINQ 的 GroupBy 方法按姓名进行分组。
  3. 使用 Select 方法选择每个组中日期最新的元素,OrderByDescending 按日期降序排列,First 获取第一个元素(即最新的日期)。
  4. 将结果存储在 result 列表中。
  5. 最后,使用 RemoveAll 方法删除 students 列表中不在 result 列表中的元素,即删除重复姓名且日期较旧的元素。

输出结果:

Name: Bob, Date: 2022/05/01
Name: Alice, Date: 2022/06/01
Name: Charlie, Date: 2022/04/01

在这个例子中,Bob 和 Alice 的重复姓名已被删除,只保留了日期最新的元素。

总结:

本文展示了如何使用 C# 和 LINQ 从 List 中删除重复的姓名,并保留具有最新日期的元素。通过使用 GroupBy、OrderByDescending、First 和 RemoveAll 方法,我们可以轻松实现这一功能。

注意:

在实际应用中,您可以根据需要修改 Student 类中的属性和代码中的逻辑。

C# 使用 LINQ 删除 List<Student> 中重复名称的元素,保留最新的日期

原文地址: https://www.cveoy.top/t/topic/qeXN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录