• Enumerable#Zip 实现一下


    早上看到“geff Zhang”介绍了Enumerable#Zip,闲来没事弄一个实现。

    也谈不上思路,看了张兄的测试代码,先写了个简单的结构:

    public static IEnumerable<TResult> Zip<TFirst, TSencond, TResult>(
                this IEnumerable<TFirst> first, 
                IEnumerable<TSencond> sencond, 
                Func<TFirst, TSencond, TResult> func)
            {
                
            }

    有了结构,实现就简单多了。张兄在文中介绍到“方法将第一个序列中的每个元素与第二个序列中有相同索引的元素合并。如果该序列不具有相同数目的元素,则直到它到达其中一个的末尾,该方法才合并序列。例如,如果一个序列有三个元素,另一个序列具有四个元素,那么结果序列将只有三个元素。”

    要读到两个序列的各个元素,按照相同索引的元素,执行func,原先想想用foreach,for之类的,好像有点麻烦,为了简单,就直接转换成IEnumerator。

    上代码,大家看了就明白了:

    public static IEnumerable<TResult> Zip<TFirst, TSencond, TResult>(
                this IEnumerable<TFirst> first, 
                IEnumerable<TSencond> sencond, 
                Func<TFirst, TSencond, TResult> func)
            {
                var firsttor = first.GetEnumerator();
                var sencondtor = sencond.GetEnumerator();
    
                while (firsttor.MoveNext())
                {
                    if (sencondtor.MoveNext())
                    {
                        yield return func(firsttor.Current, sencondtor.Current);
                    }
                }
            }

    随便写的,也没在意性能方面,等大家一起讨论下好了。

    附上测试代码:

    int[] numberic = new int[] { 1, 2, 3, 4 };
                string[] words = new string[] { "a", "b", "c", "d" };
                int[] numbericDiff = new int[] { 1, 2, 3 };
    
                var result = numberic.Zip(words, (a, b) => a + " " + b);
    
                foreach (var r in result)
                {
                    Console.WriteLine(r);
                }
    
                result = numbericDiff.Zip(words, (a, b) => a + " " + b);
    
                foreach (var r in result)
                {
                    Console.WriteLine(r);
                }

    结果:

    image

    PS:推一个旅游网站,大家工作之余也要放松自己嘛。

    http://www.sh-bus.com

    邮箱:james@taogame.com
    QQ:785418
    微信:jamesying1
    QQ群:376248054 通关:cnblogs
    技术改变生活,技术改变人生!用技术来创造价值,拥有技术,不仅仅是开发,您将获得更多!如果您觉得我能帮到您,您可以通过扫描下面二维码来【捐助】我!
  • 相关阅读:
    uva12436 回头再做一次
    Redhat中网络启动错误解决办法( Failed to start LSB: Bring up/down networking RTNETLINK answers: File exists)
    LNMP环境搭建Wordpress博客
    LNMP环境搭建Wordpress博客
    LAMP环境搭建一个Discuz论坛
    LAMP环境搭建一个Discuz论坛
    常见的SQL语句
    常见的SQL语句
    Linux系统中安装软件的几种方式
    Linux系统中安装软件的几种方式
  • 原文地址:https://www.cnblogs.com/inday/p/1761811.html
Copyright © 2020-2023  润新知