c# lambda distinct

摘要:
在写程序的时候会遇见这样的问题,那就是去重,有什么方法更快呢。list1.Contains){list1.Add;}}foreach{Console.WriteLine;}}这段代码确实能实现我们想要的效果,结果如下:这段代码虽然能实现,但是要写很多代码,用起来不方便。

在写程序的时候会遇见这样的问题,那就是去重,有什么方法更快呢。
当去重时,首先想到的是自己写代码,代码大概如下:

   private static void distinctListIntTest()
        {
            Console.WriteLine("未去重");
            List<int> list = new List<int>() { 1, 2, 3, 4, 1, 2, 3, 4 };
            foreach (int inst in list)
            {
                Console.WriteLine(inst);
            }
            Console.WriteLine("=======================");
            Console.WriteLine("去重后");
            List<int> list1 = new List<int>();
            foreach (int inst in list)
            {
                if (!list1.Contains(inst))
                {
                    list1.Add(inst);
                }
            }
            foreach (int inst in list1)
            {
                Console.WriteLine(inst);
            }
        }

这段代码确实能实现我们想要的效果,结果如下:
c# lambda distinct第1张

这段代码虽然能实现,但是要写很多代码,用起来不方便。有没有更好的办法呢,办法是有的,那就是lambda表达式的distinct方法,代码如下:

 private static void distinctListInt()
        {
            Console.WriteLine("未去重");
            List<int> list = new List<int>() { 1, 2, 3, 5, 1, 2, 3, 5 };
            foreach (int inst in list)
            {
                Console.WriteLine(inst);
            }
            Console.WriteLine("=======================");
            Console.WriteLine("去重后");
            list = list.Distinct().ToList();
            foreach (int inst in list)
            {
                Console.WriteLine(inst);
            }
        }

执行结果如下:
c# lambda distinct第2张

当简单的类型可以了,那如果是一个对象怎么办,用自己写的方法代码如下:
首先声明一个对象

public class user
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

去重的方法

  private static void distinctListEntityTest()
        {
            Console.WriteLine("未去重");
            List<user> list = new List<user>();
            user user = new user() { Name = "张三", Age = 13 };
            list.Add(user);
            user = new user() { Name = "张三", Age = 13 };
            list.Add(user);
            user = new user() { Name = "李四", Age = 14 };
            list.Add(user);
            user = new user() { Name = "李四", Age = 14 };
            list.Add(user);
            user = new user() { Name = "王五", Age = 15 };
            list.Add(user);
            user = new user() { Name = "王五", Age = 15 };
            list.Add(user);
            foreach (user inst in list)
            {
                Console.WriteLine(inst.Name);
            }
            Console.WriteLine("=======================");
            Console.WriteLine("去重后");
            List<user> list1 = new List<user>();
            foreach (user inst in list)
            {
                bool isbool = true;
                foreach (user inst1 in list1)
                {
                    if (inst1.Name.Equals(inst.Name))
                    {
                        isbool = false;
                        break;
                    }
                }
                if (isbool)
                {
                    list1.Add(inst);
                }

            }
            foreach (user inst in list1)
            {
                Console.WriteLine(inst.Name);
            }
        }

去重的方法【lambda表达式】

  private static void distinctListEntityTest()
        {
            Console.WriteLine("未去重");
            List<user> list = new List<user>();
            user user = new user() { Name = "张三", Age = 13 };
            list.Add(user);
            user = new user() { Name = "张三", Age = 13 };
            list.Add(user);
            user = new user() { Name = "李四", Age = 14 };
            list.Add(user);
            user = new user() { Name = "李四", Age = 14 };
            list.Add(user);
            user = new user() { Name = "王五", Age = 15 };
            list.Add(user);
            user = new user() { Name = "王五", Age = 15 };
            list.Add(user);
            foreach (user inst in list)
            {
                Console.WriteLine(inst.Name);
            }
            Console.WriteLine("=======================");
            Console.WriteLine("去重后");
            List<user> list1=new List<user>();
            foreach (user inst in list)
            {
                if (list1.Count(u => u.Name.Equals(inst.Name))>0)//这句用了lambda表达式
                {
                    continue;
                }
                list1.Add(inst);
            }

            foreach (user inst in list1)
            {
                Console.WriteLine(inst.Name);
            }
        }

这两种方法执行结果如下:
c# lambda distinct第3张

下面就用lambda表达式的distinct()方法代码如下

    private static void distinctListEntity()
        {
            Console.WriteLine("未去重");
            List<user> list = new List<user>();
            user user = new user() { Name = "张三", Age = 13 };
            list.Add(user);
            user = new user() { Name = "张三", Age = 13 };
            list.Add(user);
            user = new user() { Name = "李四", Age = 14 };
            list.Add(user);
            user = new user() { Name = "李四", Age = 14 };
            list.Add(user);
            user = new user() { Name = "王五", Age = 15 };
            list.Add(user);
            user = new user() { Name = "王五", Age = 15 };
            list.Add(user);
            foreach (user inst in list)
            {
                Console.WriteLine(inst.Name);
            }
            Console.WriteLine("=======================");
            Console.WriteLine("去重后");

            list = list.Distinct(new userCompare()).ToList();
            foreach (user inst in list)
            {
                Console.WriteLine(inst.Name);
            }
        }
    }
    class userCompare : IEqualityComparer<user>
    {

        #region IEqualityComparer<user> Members

        public bool Equals(user x, user y)
        {

            return x.Name.Equals(y.Name);

        }

        public int GetHashCode(user obj)
        {

            return obj.Name.GetHashCode();

        }

        #endregion

    }

运行结果如下:
c# lambda distinct第4张

最后的lambda表达式的distinct()方法只是抛砖引玉,distinct()方法好像有更简单的实现方法,欢迎为我解惑。

免责声明:文章转载自《c# lambda distinct》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python接口自动化之yaml配置文件CKEditor5入门教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java List集合 遍历 四种方式(包含 Lambda 表达式遍历)

示例代码如下: package com.miracle.luna.lambda; import java.util.ArrayList; import java.util.List; /** * @Author Miracle Luna * @Date 2019/6/9 23:36 * @Version 1.0 */ pub...

Python进阶07 函数对象【转】

秉承着一切皆对象的理念,我们再次回头来看函数(function)这一结构。函数实际上也是一个对象。既然是一个对象,它也具有属性(可以使用dir()查询)。作为对象,它还可以赋值给其它变量名,或者作为参数传递给其它函数使用。 1. lambda在展开之前,我们先提一下lambda。lambda是一种简便的,在同一行中定义函数的方法,其功能可以完全由def定...

HIVE优化学习笔记

概述 之前写过关于hive的已经有两篇随笔了,但是作者依然还是一枚小白,现在把那些杂七杂八的总结一下,供以后查阅和总结。今天的文章介绍一下hive的优化。hive是好多公司都在使用的东西,也有好多大公司进行定制化二次优化,比如鹅厂的Thive等。所以学习hive至关重要,本文只针对大众版免费开源的hive。官网地址:http://hive.apache.o...

mysql常用的聚合函数

GROUP BY(聚合)函数本章论述了用于一组数值操作的 group (集合)函数。除非另作说明, group 函数会忽略 NULL 值。 假如你在一个不包含 ROUP BY子句的语句中使用一个 group函数 ,它相当于对所有行进行分组。 AVG([DISTINCT] expr) 返回expr 的平均值。 DISTINCT 选项可用于返回 expr的不同...

Python:匿名函数lambda的函数用法和排序用法

一、介绍: Lambda函数,是一个匿名函数,创建语法:  lambda parameters:express parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数。 expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。 调用lambda...

小白也能看懂的mySQL进阶【单表查询】

目录   1.查询基础 SELECT语句基础 列的查询  为列设定别名  常数的查询 过滤表中重复数据 根据WHERE语句来选择记录  注释的书写方法  算术运算符和比较运算符 算术运算符 需要注意NULL  比较运算符 对字符串使用不等号时的注意事项 不能对NULL使用比较运算符 逻辑运算符 NOT运算符  AND运算符和OR运算符 通过括号强化处理 逻...