最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Linq實(shí)現(xiàn)簡單去重處理

 更新時(shí)間:2025年02月20日 08:40:46   作者:我是蘇蘇  
這篇文章主要為大家詳細(xì)介紹了C#如何使用Linq實(shí)現(xiàn)簡單去重處理功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、示例代碼

using System;
using System.Collections.Generic;
using System.Linq;
 
public class Program
{
    public static void Main()
    {
        // 創(chuàng)建一些示例實(shí)體對象
        var people = new List<Person>
        {
            new Person { Name = "Alice", Age = 30, City = "New York" },
            new Person { Name = "Bob", Age = 25, City = "Los Angeles" },
            new Person { Name = "Alice", Age = 30, City = "New York" },//重復(fù)的
            new Person { Name = "Charlie", Age = 35, City = "Chicago" },
            new Person { Name = "Alice", Age = 28, City = "San Francisco" }
        };
 
        // 1. 單字段去重
        var uniqueNameFields = people.DistinctBy(p =>p.Name).ToList();
        Console.WriteLine("指定字段(Name)去重結(jié)果,重復(fù)則保留第一條:");
        foreach (var person in uniqueNameFields)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, City: {person.City}");
        }
 
        // 2. 多字段去重
        var uniqueNameAgeFields = people.DistinctBy(p => new { p.Name, p.Age }).ToList();
        Console.WriteLine("\n指定字段(Name, Age)去重結(jié)果,重復(fù)則保留第一條:");
        foreach (var person in uniqueNameAgeFields)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, City: {person.City}");
        }
 
        //3.全字段去重
        // 通過 GroupBy 按 Name 和 Age 字段去重
        var uniquePeople = people.DistinctBy(p => new { p.Name, p.Age, p.City }).ToList();
        Console.WriteLine("\n全字段去重:");
        foreach (var person in uniquePeople)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, City: {person.City}");
        }
    }
}
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
}

二、示例輸出

指定字段(Name)去重結(jié)果,重復(fù)則保留第一條:
Name: Alice, Age: 30, City: New York
Name: Bob, Age: 25, City: Los Angeles
Name: Charlie, Age: 35, City: Chicago
 
指定字段(Name, Age)去重結(jié)果,重復(fù)則保留第一條:
Name: Alice, Age: 30, City: New York
Name: Bob, Age: 25, City: Los Angeles
Name: Charlie, Age: 35, City: Chicago
Name: Alice, Age: 28, City: San Francisco
 
全字段去重:
Name: Alice, Age: 30, City: New York
Name: Bob, Age: 25, City: Los Angeles
Name: Charlie, Age: 35, City: Chicago
Name: Alice, Age: 28, City: San Francisco

三、注意雷點(diǎn)

以下代碼不能完成全字段去重,因?yàn)閜eople是引用類型,Distinct() 一般用于List<string>,List<int>這些值類型去重,而不涉及引用類型的字段比較。

people.Distinct().ToList()

若需要全字段去重:1.使用DinstinctBy語法,加上所有字段。2.使用標(biāo)題四的封裝方法(反射實(shí)現(xiàn)全字段去重)。

四、全字段去重封裝方法

1.封裝

/// <summary>
/// 通用的全字段去重方法
/// </summary>
/// <returns></returns>
public static IEnumerable<T> DistinctByAllFields<T>(IEnumerable<T> items)
{
    // 獲取 T 類型的所有字段值
    var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
 
    return items
        .GroupBy(item => string.Join(",", properties.Select(p => p.GetValue(item))))  // 按所有字段值連接生成唯一標(biāo)識符
        .Select(group => group.First());  // 取每組的第一個(gè)元素
}

2.示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
 
public class Program
{
    public static void Main()
    {
        // 創(chuàng)建一些示例實(shí)體對象
        var people = new List<Person>
        {
            new Person { Name = "Alice", Age = 30, City = "New York" },
            new Person { Name = "Bob", Age = 25, City = "Los Angeles" },
            new Person { Name = "Alice", Age = 30, City = "New York" },
            new Person { Name = "Charlie", Age = 35, City = "Chicago" },
            new Person { Name = "Alice", Age = 28, City = "San Francisco" }
        };
 
        // 調(diào)用封裝的去重方法
        var uniquePeople = DistinctByAllFields(people).ToList();
 
        Console.WriteLine("根據(jù)所有字段去重的結(jié)果:");
        foreach (var person in uniquePeople)
        {
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, City: {person.City}");
        }
    }
 
    /// <summary>
    /// 通用的全字段去重方法
    /// </summary>
    /// <returns></returns>
    public static IEnumerable<T> DistinctByAllFields<T>(IEnumerable<T> items)
    {
        // 獲取 T 類型的所有字段值
        var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
 
        return items
            .GroupBy(item => string.Join(",", properties.Select(p => p.GetValue(item))))  // 按所有字段值連接生成唯一標(biāo)識符
            .Select(group => group.First());  // 取每組的第一個(gè)元素
    }
}
 
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
}

以上就是C#使用Linq實(shí)現(xiàn)簡單去重處理的詳細(xì)內(nèi)容,更多關(guān)于C# Linq去重的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中矩陣運(yùn)算方法實(shí)例分析

    C#中矩陣運(yùn)算方法實(shí)例分析

    這篇文章主要介紹了C#中矩陣運(yùn)算方法,實(shí)例分析了通過C#實(shí)現(xiàn)矩陣的初始化、轉(zhuǎn)置矩陣、求逆矩陣等各種常用的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 詳解WPF中用戶控件和自定義控件的使用

    詳解WPF中用戶控件和自定義控件的使用

    無論是在WPF中還是WinForm中,都有用戶控件(UserControl)和自定義控件(CustomControl),這兩種控件都是對已有控件的封裝,實(shí)現(xiàn)功能重用。但是兩者還是有一些區(qū)別,本文對這兩種控件進(jìn)行講解
    2023-03-03
  • WinForm遍歷窗體所有子控件的方法

    WinForm遍歷窗體所有子控件的方法

    這篇文章主要介紹了WinForm遍歷窗體所有子控件的方法,涉及C#遞歸遍歷相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • C#集合之字典的用法

    C#集合之字典的用法

    這篇文章介紹了C#集合之字典的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • unity3D實(shí)現(xiàn)三維物體跟隨鼠標(biāo)

    unity3D實(shí)現(xiàn)三維物體跟隨鼠標(biāo)

    這篇文章主要為大家詳細(xì)介紹了unity3D實(shí)現(xiàn)三維物體跟隨鼠標(biāo),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明

    c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明

    這篇文章主要介紹了c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C#使用EasyModbus進(jìn)行通訊的實(shí)現(xiàn)示例

    C#使用EasyModbus進(jìn)行通訊的實(shí)現(xiàn)示例

    EasyModbus是一個(gè)流行的.NET庫,用于實(shí)現(xiàn)Modbus TCP、RTU和UDP協(xié)議通信,本文就來介紹一下C#使用EasyModbus進(jìn)行通訊的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2026-01-01
  • C# 中將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組的方法

    C# 中將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組的方法

    C# 中將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組的方法,需要的朋友可以參考一下
    2013-05-05
  • 基于C#實(shí)現(xiàn)二維碼和條形碼生成與打印

    基于C#實(shí)現(xiàn)二維碼和條形碼生成與打印

    本文介紹了基于C#實(shí)現(xiàn)二維碼和條形碼生成及打印的技術(shù)方案,包括核心庫選型、圖像處理、打印實(shí)現(xiàn)、高級功能、異常處理、性能優(yōu)化、部署建議和安全措施,適用于多種打印需求,需要的朋友可以參考下
    2025-10-10
  • Unity實(shí)現(xiàn)物體運(yùn)動(dòng)時(shí)畫出軌跡

    Unity實(shí)現(xiàn)物體運(yùn)動(dòng)時(shí)畫出軌跡

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體運(yùn)動(dòng)時(shí)畫出軌跡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

东源县| 二连浩特市| 包头市| 高碑店市| 兰考县| 台中县| 阿勒泰市| 安康市| 池州市| 洛宁县| 鹤峰县| 长宁县| 桐梓县| 缙云县| 襄垣县| 丹阳市| 三亚市| 罗田县| 安西县| 垦利县| 上高县| 揭东县| 红原县| 应城市| 项城市| 安塞县| 青龙| 前郭尔| 高尔夫| 江陵县| 视频| 新河县| 迁安市| 高安市| 额济纳旗| 灵璧县| 台州市| 仙游县| 台东市| 西宁市| 凤山县|