Linq学习总结1

筛选出数组中值大于10的元素

普通方法实现

        /// <summary>
        /// 自定义筛选方法1
        /// </summary>
        /// <param name="items"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        static IEnumerable<int> MyWhere(IEnumerable<int> items, Func<int, bool> func)
        {
            List<int> result = new List<int>();
            foreach (var item in items)
            {
                if (func(item))
                {
                    result.Add(item);
                }
            }
            return result;
        }


        /// <summary>
        /// 自定义筛选方法2
        /// </summary>
        /// <param name="items"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        static IEnumerable<int> MyWhereYeild(IEnumerable<int> items, Func<int, bool> func)
        {
            foreach (var item in items)
            {
                if (func(item))
                {
                    yield return item;
                }
            }
        }

调用:

        static void Main(string[] args)
        {
            int[] nums = new int[] { 1, 5, 9, 3, 52, 100 };
            
            //方法一
            var result1 = MyWhere(nums, a => a > 10);
            foreach (var k in result1)
            {
                Console.WriteLine(k);
            }

            //方法二
            var result2 = MyWhereYeild(nums, a => a > 10);
            foreach (var k in result2)
            {
                Console.WriteLine(k);
            }

            Console.Read();
        }

执行结果:

实现的原理是声明一个方法,参数分别是要筛选的数组和筛选条件。筛选条件是个委托,在调用的时候使用lambda表达式传入筛选条件。在方法体中判断,如果满足条件就将数据返回。

方法一和方法二的区别:

方法一会循环判断每一值,如果符合条件就将值存放在List中,数组中所有的值都遍历完成后,再将List返回;

方法二是在遍历时只要满足条件,立即将当前值返回到调用的地方,然后继续回到遍历当中,如果存在符合条件的值,再次将值返回到调用出,直到遍历结束。

Linq实现

        static void Main(string[] args)
        {
            int[] nums = new int[] { 1, 5, 9, 3, 52, 100 };
            var result = nums.Where(i => i > 10);//using System.Linq;
            foreach (var k in result)
            {
                Console.WriteLine(k);
            }
            Console.Read();
        }

执行结果:

引入Linq命名空间,调用数组的扩展方法,使用lambda表达式作为筛选条件。

Linq的where方法实现原理其实就是“自定义筛选方法1”的实现方式,只不过是框架做了封装,调用更加方便。

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/121235097