如何连接两个不同长度的列表。它应该与序列结合在一起。 例如。
{1,2,3,4} with {5,6,7}
我需要得到如下结果。
{{1,5}, {2,6}, {3,7}, {4,null}}
我尝试过这个。
var qry = a.Select((i, index) => new {i, j = b[index]});
但是它会抛出错误,因为列表的长度不同。 请帮助我找到解决方案。
最佳答案
这应该有效:
var a = new int?[] { 1, 2, 3, 4 };
var b = new int?[] { 5, 6, 7 };
var result = Enumerable.Range(0, Math.Max(a.Count(), b.Count()))
.Select(n => new[] {a.ElementAtOrDefault(n), b.ElementAtOrDefault(n)});
请注意数组声明中的?
。为了在结果列表中包含空值,这是必要的。省略 ?
会导致结果为 0,而不是 null
。
如果您不能或不想将数组声明为 int?
,那么您必须在 Select 中进行强制转换,如下所示:
var result = Enumerable.Range(0, Math.Max(a.Count(), b.Count()))
.Select(n => new[] { a.Select(i => (int?)i).ElementAtOrDefault(n), b.Select(i => (int?)i).ElementAtOrDefault(n) });
第二段代码可以与常规 int
数组或列表一起正常工作。
关于c# - 在 LINQ 中连接 2 个具有不同长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46607179/