haiconc

用委托实现对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();
        }

posted on 2012-02-16 19:54  haiconc  阅读(995)  评论(0编辑  收藏  举报

导航