C# List去重的三种方法「建议收藏」

C# List去重的三种方法「建议收藏」三种去重的方法1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。2、使用表达式users.Where((x,i)=>users.FindIndex(z=>z.name==x.name)==i)去重,这条语句是查找users中name等于x.name的第一个元素。经实验,这个方法效率最低。3、使用循环,判断每个元素是否重复

大家好,又见面了,我是你们的朋友全栈君。

三种去重的方法

1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。

2、使用表达式

users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)

去重,这条语句返回结果只保留users这个List中重复的元素的第一个(name相等认为重复)。

3、使用循环,判断每个元素是否重复

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

namespace NonDuplicateList
{
    class Program
    {
        static void Main(string[] args)
        {
            List<User> users = new List<User>();
            users.Add(new User("张三", "永丰路299号"));
            users.Add(new User("张三", "上地西路8号"));//重复项,去重后将删掉
            users.Add(new User("李四", "海鹰路甲一号"));

            List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重
            List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList();//Lambda表达式去重
            List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重
            foreach(User user in users)
            {
                if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)
                {
                    nonDuplicateList3.Add(user);
                }
            }

            foreach(List<User> list in new Object[]{nonDuplicateList1,nonDuplicateList2,nonDuplicateList3})//打印出三个List的元素
            {
                Console.Write("nonDuplicateList:\r\n");
                foreach(User u in list)
                {
                    Console.WriteLine("\t" + u.ToString());
                }
            }
            Console.Read();
        }
    }

    class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重
    {
        public string name { get; set; }
        string address;

        public User(string _name, string _address)
        {
            name = _name;
            address = _address;
        }

        public override string ToString()
        {
            return string.Format("name:{0},\taddress:{1}", name, address);
        }

        public bool Equals(User other)
        {
            return this.name == other.name;
        }
        public override int GetHashCode()
        {
            return name.GetHashCode();
        }
    }
}

C# List去重的三种方法「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141430.html原文链接:https://javaforall.net

赞 (1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [驱动注册]platform_driver_register()与platform_device_register()「建议收藏」

    [驱动注册]platform_driver_register()与platform_device_register()「建议收藏」[驱动注册]platform_driver_register()与platform_device_register()     设备与驱动的两种绑定方式:在设备注册时进行绑定及在驱动注册时进行绑定。以一个USB设备为例,有两种情形:(1)先插上USB设备并挂到总线中,然后在安装USB驱动程序过程中从总线上遍历各个设备,看驱动程序是否与其相匹配,如果匹配就将两者邦定。这就是p

    2022年7月26日
  • 简述为什么要使用多线程_threadlocal详解

    简述为什么要使用多线程_threadlocal详解说明:Thread的IsBackground=true;//主程序结束后,线程随之结束【日常要用到的】Thread的IsBackground=false;//主程序结束后,线程不会随之结束代码:usingSystem;usingSystem.Threading;namespaceConsoleApp1{classProgram{staticvoidMain(string[]args){Th

    2022年10月16日
  • hi3516dv300芯片手册_hi3518ev300

    hi3516dv300芯片手册_hi3518ev300基于Hi3516DV300的嵌入式入门演练(上)基于Hi3516DV300的嵌入式入门演练(下)文章目录信息5常见外设操作5.1USB无线网卡5.1.1在内核中开启驱动支持5.1.2准备驱动需使用到的固件文件5.1.3使用wpa_supplicant连接到热点5.1.4使用hostapd将网卡作为AP5.2TF卡的挂载5.2.1手动挂载5.2.2使用mdev自动挂载设备5.2.3使用udev自动挂载设备6扩展演练6.1使用Buildroot构建根文件系统6.2理解设备树6.3

    2022年9月24日
  • html圣杯布局,HTML+CSS实现圣杯布局![通俗易懂]

    html圣杯布局,HTML+CSS实现圣杯布局![通俗易懂]实现圣杯布局有2中方法:1、flex布局:(推荐)爸爸直接上代码:headerleftmiddlerightfooter下面是CSS代码:html,body{padding:0;margin:0;text-align:center;}header,footer{border:1pxsolid#333;background:#ccc;}section{displ…

    2022年6月16日
  • 理解self,this,parent

    理解self,this,parent

    2021年6月30日
  • 华为手机像素密度排行_「屏幕像素密度」(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系? – seo实验室…[通俗易懂]

    华为手机像素密度排行_「屏幕像素密度」(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系? – seo实验室…[通俗易懂]屏幕像素密度今天我给大家来讲讲这几个咱们经常打交道的词到底啥意思,以及他们之间到底有什么关系。这篇文章是我花了一个下午从N多篇文章里提炼出的一个白话版,保证让你看得懂。咱们从手机开始说起吧。先上一张图,给大家看看关于手机屏幕方面的一些参数。红框内的三个参数,大家一定都不陌生,我也不陌生。不过讲真的,就在不久前,我连手机的屏幕尺寸到底是怎么算出来的都不知道。下面我们开始慢慢讲。屏幕(主屏)尺寸是什么…

    2022年6月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号