zoukankan      html  css  js  c++  java
  • 用委托实现对List的常用方法提取

    在开发中,List是经常用到的数据类型。对List操作有一些常用方法,可以用委托和lambda表达式进行提取方法。

    首先声明使用到的几个委托

        public delegate bool Condi<T>(T ele);
        public delegate void Do<T>(T ele);
        public delegate K Transto<T,K>(T ele);

    第一个方法 列表内符合条件的元素的个数

     /// <summary>
            /// 列表内符合条件的元素的个数
            /// </summary>
            public static int Count<T>(List<T> list, Condi<T> condi)
            {
                int count = 0;
                foreach (T e in list)
                {
                    if (condi(e))
                    {
                        count++;
                    }
                }
                return count;
            }

    第二个方法 筛选出符合条件的元素
            /// <summary>
            /// 筛选出符合条件的元素
            /// </summary>
            public static List<T> Filter<T>(List<T> list, Condi<T> condi)
            {
                List<T> newlist = new List<T>();
                foreach (T e in list)
                {
                    if (condi(e))
                    {
                        newlist.Add(e);
                    }
                }
                return newlist;
            }
    第三个方法 每个元素都执行一个操作
            /// <summary>
            /// 每个元素都执行一个操作
            /// </summary>
            public static void Foreach<T>(List<T> list, Do<T> DO)
            {
                foreach (T e in list)
                {
                    DO(e);
                }
            }
    第四个方法 是否存在符合条件和元素
            /// <summary>
            /// 是否存在符合条件和元素
            /// </summary>
            public static bool Exists<T>(List<T> list, Condi<T> condi)
            {
                foreach (T e in list)
                {
                    if (condi(e))
                    {
                        return true;
                    }
                }
                return false;
            }
    第五个方法 转换数据类型
            /// <summary>
            /// 转换数据类型
            /// </summary>
            public static List<K> Trans<T,K>(List<T> list, Transto<T,K> tran)
            {
                List<K> newlist = new List<K>();
                foreach (T e in list)
                {
                    newlist.Add(tran(e));
                }
                return newlist;
            }

    可以用下面的代码测试一下运行情况

     public static void Main(string[] args)
            {
                //List<int> list = new List<int>( new int[]{0,1,2,-2,3,-1,10,4,6});
                List<int> list = new List<int>(new int[] { 0, 100, 20, -20 });
                Console.WriteLine("列表的个数是" +  list.Count);
                Console.WriteLine("列表大于0的个数是"+ ListExt.Count<int>( list,e=>e>0));
                Console.Write("列表大于0的元素是");
                ShowList<int>( ListExt.Filter<int>(list, e => e > 0));
                ListExt.Foreach<int>(list, e => Console.Write(e+","));
                Console.WriteLine();
                Console.WriteLine("列表是否存在小于0的元素" + ListExt.Exists<int>(list, e => e <0));
                Console.Write("转换数据类型");
                ShowList<string>(ListExt.Trans<int, string>(list, e => e.ToString().ToCharArray()[0].ToString()));
            }

            static void ShowList<T>(List<T> list)
            {
                foreach(T t in list)
                {
                    Console.Write(t+",");
                }
                Console.WriteLine();
            }

  • 相关阅读:
    [Leetcode][Python]29: Divide Two Integers
    [Leetcode][Python]28: Implement strStr()
    [Leetcode][Python]27: Remove Element
    前端笔记(百度)
    关于html5新增的功能(百度)
    一些我容易混淆的知识(关于数组的操作、对字符串的操作)
    web前端~~浏览器兼容问题(百度)
    关于前端的性能优化问题
    封装ajax(二)闭包的形式
    封装ajax
  • 原文地址:https://www.cnblogs.com/haiconc/p/2354807.html
Copyright © 2011-2022 走看看