c# lambda distinct

本文讨论了编程中去重问题的多种解决方法,包括使用Lambda表达式的distinct方法和自定义比较类,适用于简单类型和对象类型的列表。通过对比不同方法的执行效率和简洁性,展示了如何在实际编程中高效地进行数据去重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

   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);
            }
        }

这段代码确实能实现我们想要的效果,结果如下:
192324356283835.jpg

这段代码虽然能实现,但是要写很多代码,用起来不方便。有没有更好的办法呢,办法是有的,那就是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);
            }
        }

执行结果如下:
192329469728653.jpg

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

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);
            }
        }

这两种方法执行结果如下:
192333299251332.jpg

下面就用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

    }

运行结果如下:
192346466136225.jpg

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

转载于:https://www.cnblogs.com/zwgblogs/p/4743874.html

### 扣子智能体平台功能与使用说明 #### 平台概述 扣子Coze)是由字节跳动推出的一款面向终端用户的智能体开发平台[^3]。该平台支持用户通过零代码或低代码方式快速构建基于人工智能大模型的各种智能体应用,并能够将其部署至其他网站或者通过 API 集成到现有的系统中。 #### 快速搭建智能体 无论是具备还是缺乏编程基础的用户,都能够借助扣子平台迅速创建一个 AI 智能体。例如,可以参照一篇教程中的实例来学习如何打造一个解决日常生活问题的小助手[^1]。这不仅降低了技术门槛,还使得更多的人有机会参与到智能化工具的设计过程中去。 #### 插件系统的利用 为了进一步增强所建智能体的能力,在其技能配置环节可加入不同类型的插件。一旦添加成功,则可以在编写提示语句的时候直接调用这些插件,亦或是融入自动化流程里实现更复杂操作逻辑的目的[^2]。这种灵活运用外部资源的方法极大地拓宽了单个智能体所能覆盖的应用场景范围。 ```python # 示例:假设我们有一个简单的 Python 脚本用于模拟调用某个插件功能 def call_plugin(plugin_name, parameters): result = f"Plugin {plugin_name} called with params: {parameters}" return result example_call = call_plugin("weather", {"location": "Beijing"}) print(example_call) ``` 上述代码片段仅作为概念展示之用,实际情况下具体实现会依据官方文档指导完成。 #### 总结 综上所述,扣子智能体平台提供了便捷高效的途径让用户无需深厚编码背景即可打造出满足特定需求的AI解决方案;同时它开放性强允许接入第三方服务从而提升整体性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值