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


相关推荐

  • 电商社交数据在大数据风控的应用实践

    电商社交数据在大数据风控的应用实践

    2022年3月3日
    25
  • mysql通配符_mysql通配符使用

    mysql通配符_mysql通配符使用mysql通配符使用:w3cchool在mysql查询中,经常会用到通配符,而且mysql的通配符和pgsql是有所不同的,甚至mysql中还可以使用正则表达式。本文就为大家带来mysql查询中通配符的使用。SQL模式匹配:“_”匹配单个字符,”\_”匹配”_”“%”匹配任意个字符,包括零个字符sql模式下的匹配,缺省是对于字母的大小写没有要求,并且sql模式下,“=”或”!=”是不能在模…

    2022年6月24日
    31
  • 需求跟踪矩阵「建议收藏」

    需求跟踪矩阵「建议收藏」需求跟踪矩阵与需求双向跟踪(1)2006年08月22日星期二00:35刚刚接触CMMI的人在研究RequirementManagement这个PA的时候,对SP1.4MaintainBidirectionalTraceabilityofRequirements可能会比较疑惑,足以让国内大多数的没有真正软件工程开发管理的软件工程师,开发管理者不知所云

    2022年10月22日
    0
  • ModelAndView使用

    ModelAndView使用关于对ModelAndView自己的理解2017年11月27日09:32:55 静风落叶 阅读数:3975   之前学习的时候遇见过这个ModelAndView,但是一直不知道是什么意思,今天在项目里面遇到了,就理解下,加深自己的印象,以下内容均是本人对此理解,欢迎一起留言讨论。   首先ModelAndView分为两部分:model和view。model负责的是从后面接收回来…

    2022年7月18日
    17
  • mock测试工具

    mock测试工具什么是mock测试mock常见场景mock常用工具实战1,什么是mock测试mock测试就是对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法2,mock常见场景(1)无法控制第三方系统某接口的返回,返回的数据不满足要求(2)某依赖系统还未开发完成,就需要对被测系统进行测试3,mock常用工具(1)单元测试级别的mock工具:Easymock、jMock、Mockito、UnitilsMock、PowerMock、JMockit等(2)接口测试级别的.

    2022年6月20日
    36
  • Macromedia flash制作落叶飘下动画

    Macromedia flash制作落叶飘下动画flash制作落叶动画打开MacromediaFlash软件,新建一个flash文档将所需所有素材导入到库中设置背景并将拖入到舞台的图片转换为图片元件设置落叶图层为图层2添加引导层,自定义枫叶下落路线轨迹。打开MacromediaFlash软件,新建一个flash文档将所需所有素材导入到库中使用“文件-导入-导入到库”命令将所有素材导入到库中。导入结果如下图设置背景并将拖入到舞台的图片转换为图片元件将库中的图片拖入到舞台中间,自动创建图层1,选中左侧工具栏中的“任意变形工具”,拖动过

    2022年5月2日
    51

发表回复

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

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