• Linq扩展方法


    如果要扩展LINQ查询方法集,只需要为IEnumerable<T>扩展方法。

    第一种:扩展聚合方法,类似已有的Max、Min,可以给具体类型扩展,也可以给泛型扩展。

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    
    namespace ConsoleApp4
    {
        class Program
        {
            static void Main(string[] args)
            {
                var numbers1 = new double[]{ 1.9, 2, 8, 4, 5.7, 6, 7.2, 0 };
    
                var query1 = numbers1.Median();
    
                Console.WriteLine("double: Median = " + query1);
                
                var numbers2 = new int[] { 4, 5, 6, 8, 0 };
                var query2 = numbers2.Median();
    
                Console.WriteLine($"int:Median ={query2}");
    
                var str1 = new string[] { "ab", "abc", "abcde", "abcedfs" }; ;
                var query3 = str1.Median(x => x.Length);
    
                Console.WriteLine($"string:{query3}");
            }
         
        }
    
        public static class LINQExtension
        {
            public static double Median(this IEnumerable<double> source)
            {
                if(source.Count()==0)
                {
                    throw new InvalidOperationException("无法计算中位数");
                }
    
                var sortedList = source.OrderBy(x => x);
    
                int itemIndex = (int)sortedList.Count()/2;
    
                // 索引从0开始,itemIndex总是偏大
                if(sortedList.Count()%2==0)
                {
                    return (sortedList.ElementAt(itemIndex) + sortedList.ElementAt(itemIndex - 1)) / 2;
                }
                else
                {
                    return sortedList.ElementAt(itemIndex);
                }
            }
           
            //Int类型重载求中位数
            public static double Median(this IEnumerable<int> source)
            {            
                return source.Select(x => Convert.ToDouble(x)).Median();           
            }
    
            //泛型,需传入选择器
            public static double Median<T>(this IEnumerable<T> source,Func<T,double> selector)
            {
                return source.Select(x => selector(x)).Median();
            }       
        }    
    }
    View Code

    第二中:扩展返回集合的方法,类似Where、Orderby

     public static class LINQExtension
        {
            public static IEnumerable<T> AlternateElements<T>(this IEnumerable<T> source)
            {
                List<T> list = new List<T>();
    
                int i = 0;
    
                foreach (var item in source)
                {
                    if (i % 4 == 2)
                    {
                        list.Add(item);
                    }
                }
                return list;           
            }
        }
  • 相关阅读:
    14个你可能不知道的JavaScript调试技巧
    数据库设计四步骤
    mac 卸载 jdk
    node版本管理
    mysql order by limit 问题
    计算机一些基本概念的认识
    SQL设置主外键关联时报错
    阻止表单autocomplete
    常见字符编码
    编程语言分类
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/linq_extension.html
Copyright © 2020-2023  润新知