[英]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.