在LINQ中按顺序加入2个列表而不是条件

Rya*_*yan 5 linq linq-to-objects join

如何加入2个相等长度的列表(以产生相等长度的第3个列表),其中我不想指定条件,而只是依赖于2个列表中的项目顺序.

我怎么加入:

{1,2,3,4} with {5,6,7,8}
Run Code Online (Sandbox Code Playgroud)

生产:

{{1,5}, {2,6}, {3,7}, {4,8}}
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

from i in new []{1,2,3,4}
from j in new []{5,6,7,8}
select new { i, j }
Run Code Online (Sandbox Code Playgroud)

但这会产生交叉连接.当我使用join时,我总是需要指定"on".

CMS*_*CMS 15

您可以在第一个列表中使用Select,使用项索引并访问第二个列表中的元素:

var a = new [] {1,2,3,4};
var b = new [] {5,6,7,8};

var qry = a.Select((i, index) => new {i, j = b[index]}); 
Run Code Online (Sandbox Code Playgroud)


Mat*_*len 5

如果您使用的是.Net 4.0,则可以使用Zip扩展方法和Tuples.

var a = new [] {1,2,3,4};
var b = new [] {5,6,7,8};

var result = a.Zip(b, (an, bn) => Tuple.Create(an, bn));
Run Code Online (Sandbox Code Playgroud)

或者,您可以将它们保存为数组:

var resultArr = a.Zip(b, (an, bn) => new []{an, bn});
Run Code Online (Sandbox Code Playgroud)