Enumerable#Zip 實現一下

來源:互聯網
上載者:User

早上看到“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);            }

結果:

 

PS:推一個旅遊網站,大家工作之餘也要放鬆自己嘛。

http://www.sh-bus.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.