zoukankan      html  css  js  c++  java
  • c# lambda distinct

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

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

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

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

    执行结果如下:

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

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

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

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

    运行结果如下:

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

  • 相关阅读:
    Building Forest CodeForces
    欢迎使用CSDN-markdown编辑器
    Travelling HDU
    Card Collector HDU
    Doing Homework HDU
    Mirror Number SPOJ
    Palindromic Numbers LightOJ
    Magic Numbers CodeForces
    Xor-sequences CodeForces
    Little Elephant and Elections CodeForces
  • 原文地址:https://www.cnblogs.com/zwgblogs/p/4743874.html
Copyright © 2011-2022 走看看