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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot笔记(1)

    SpringBoot笔记(1)

    2021年11月12日
    48
  • Oracle listagg去重distinct三种方法总结

    Oracle listagg去重distinct三种方法总结一、简介最近在工作中,在写oracle统计查询的时候,遇到listagg聚合函数分组聚合之后出现很多重复数据的问题,于是研究了一下listagg去重的几种方法,以下通过实例讲解三种实现listagg去重的方法。二、方法首先还原listagg聚合之后出现重复数据的现象,打开plsql,执行如下sql:selectt.department_namedepname,…

    2025年9月27日
    1
  • java 10套完整项目开发案例 (详细实现步骤)

    java 10套完整项目开发案例 (详细实现步骤)所有推荐的项目,一般都不会在你的环境下面一步到位调试成功的,这需要你自己去慢慢调整。请记住:调整的过程也是一个学习的过程,而且是一个很重要的学习过程。如果你连调试的耐心都没有了,那么建议调整好心态来重新学习。另外一点,如果你想提高自己的JavaWeb水平,一样建议你好好敲一次下面的几个项目。java十大项目开发一.进销存管理系统二.企业内部通信系统三.企业人事管理系统四.酒店管理系统五.图书馆管理系统六.企业快信七….

    2022年7月9日
    26
  • OpenCV——Canny边缘检测(cv2.Canny())

    OpenCV——Canny边缘检测(cv2.Canny())Canny边缘检测Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。1986年,JohnF.Canny发表了著名的论文AComputationalApproachtoEdgeDetection,在该论文中详述了如何进行边缘检测。Canny()边缘检测步骤Canny边缘检测分为如下几个步骤:步骤1:去噪。噪声会影响边缘检测的准确性,因此首先要将噪声过滤掉。步骤2:计算梯度的幅度与方向。步骤3:非极大值抑制,即适当地让边缘“变瘦”。步骤4:确定边缘。使

    2022年5月25日
    42
  • linux mysql 修改表名_Linux下mysql怎么设置表名?「建议收藏」

    linux mysql 修改表名_Linux下mysql怎么设置表名?「建议收藏」Linux下mysql可以通过“ALTERTABLE旧表名RENAME[TO]新表名;”语句来修改表名;还可以通过配置my.cnf文件,修改“lower_case_table_names”选项的值为“1”来设置表名不区分大小写。Linux下mysql设置表名在MySQL中,可以使用ALTERTABLE语句来实现表名的修改。在MySQL中可以使用ALTERTABLE语句…

    2022年5月31日
    33
  • hive DML[通俗易懂]

    hive DML[通俗易懂]hive DML

    2022年4月20日
    44

发表回复

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

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