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去重的三种方法「建议收藏」

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)
blank

相关推荐

  • CSS 相邻兄弟选择器

    相邻兄弟选择器(Adjacentsiblingselector)可选择紧接在另一元素后的元素,且二者有相同父元素。选择相邻兄弟如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用

    2021年12月20日
  • 滑动窗口 leetcode_滑动窗口的概念

    滑动窗口 leetcode_滑动窗口的概念原题链接给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值————— —–[1 3 -1] -3 5 3 6 7

  • $(document).click() 在苹果手机上不能正常运行解决方案

    $(document).click() 在苹果手机上不能正常运行解决方案

  • JSP简明教程「建议收藏」

    1、jsp是什么?1)jsp:javaserverpages2)jsp运行在服务器3)jsp的基础是servlet,相当于对servlet进行一个包装4)jsp无需配置,直接使用,如果修改了jsp文件,不需要重新reloadweb应用5)jsp访问方法:http://ip:8080/web应用名/jsp路径6)jsp是一种动态网页技术2、JSP=html+java片段+JSP标签(语法)+j

  • redis优化配置和redis.conf说明

    redis优化配置和redis.conf说明

    2021年12月14日
  • 【西安xxx面经】

    【西安xxx面经】我是在线下一天面完的,总共有五面。一面:自我介绍,问题基本上都是根据简历上问的,我简历上写了算法和数据结构所以问题都是和这些相关。一面有两个面试官,先问了面向对象的思想,面向对象的三大特性,分别解释一下。然后就是数据结构方面的知识:栈,队列,哈希表,如果数据很多的话用哈希表怎么存储。手撕二分,然后手撕一个关于链表的题:现在有很多节点,每个节点都有它在链表中的编号,现在要按照编号将这个链表复原。(因为面试官没有c++环境,所以我用的记事本编程,需要讲出来思路,每一句的作用)。面试体验:两个面试官还是有压力

发表回复

您的电子邮箱地址不会被公开。

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