簡體   English   中英

Linq - 如何結合兩個enumerables

[英]Linq - how to combine two enumerables

如何修改版本2以產生與版本1相同的結果,因為在版本2中我得到了克里特產品。

int[] a = { 1, 2, 3 };

string[] str = { "one", "two", "three" };

版本1

var q = 
        a.Select((item, index) =>
         new { itemA = item, itemB = str[index] }).ToArray();

版本2

var query = from itemA in a
            from index in Enumerable.Range(0,a.Length)
            select new { A = itemA, B = str[index] };

這在函數式編程中稱為zip 它現在可以作為內置的.NET 4.0使用,但您可以自己編寫。 他們的聲明是:

public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
  this IEnumerable<TFirst> first, 
  IEnumerable<TSecond> second, 
  Func<TFirst, TSecond, TResult> func);

你的結果將是這樣的:

var results = a.Zip(b, (x,y) => new { itemA = x, itemB = y });

雖然它在4.0中,但是這個功能可以很容易地自己實現。

你是說這個嗎?

var query = from index in Enumerable.Range(0,a.Length)
            select new { A = a[index], B = str[index] };

你不應該。

版本1沒有任何問題; 你不應該總是嘗試使用查詢理解語法只是為了它的樂趣。

如果你真的想這樣做,你可以寫下面的內容:

from i in Enumerable.Range(0, a.Length)
select new { A = a[i], B = b[i] };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM