假设我有这两个数组:
const int length = 5;
var ints = new int[length] { 1, 2, 3, 4, 5 };
var strings = new string[length] { "s1", "s2", "s3", "s4", "s5" };
Run Code Online (Sandbox Code Playgroud)
我想循环这些而不是这个
for (var index = 0; index < length; index++)
{
var i = ints[index];
var s = strings[index];
DoSomething(i, s);
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以使用LINQ以某种方式实现这样的目标
var items = ... i in ints
... s in strings
select new { I = i, S = s };
foreach (var item in items)
{
DoSomething(item.I, item.S);
}
Run Code Online (Sandbox Code Playgroud)
只是做这样的嵌套from不起作用
var items = from i in ints
from s in strings
select new { I = i, S = s };
Run Code Online (Sandbox Code Playgroud)
因为那将为from每个外部迭代重复内部.
你想要linq Zip.例如,请查看此站点http://jesseliberty.com/2011/06/13/the-linq-zip-operator/
我还是要添加一个例子来指出一些问题.Zip总是会达到最短的长度.即使在6的整数,它仍然会返回5.我知道在你的例子中你有相同的但只是传递有关linq的Zip的信息.
var ints = new int[] { 1, 2, 3, 4, 5, 6 };
var strings = new string[] { "s1", "s2", "s3", "s4", "s5" };
var zipper = ints.Zip(strings, (i, s) => new {i, s});
Run Code Online (Sandbox Code Playgroud)
正如@CharlesNRice所建议的,您可以像这样使用LINQ Zip:
var items = ints.Zip(strings, (i, s) => new {I = i, S = s});
Run Code Online (Sandbox Code Playgroud)
这也可以使用以下方法完成Select:
ints.Select((x,idx) => new { I = x, S = strings[idx] });
Run Code Online (Sandbox Code Playgroud)