我想Zip多个整数列表,不知道如何在LinQ中做到这一点。
这是我的清单:
List<KeyValuePair<Guid, List<int>>> totals = Totals.Where(x => x.Key == myGuid).ToList();
//where Totals is a List<KeyValuePair<Guid, List<int>>>
List<List<int>> totalsValue = totals.Select(s => s.Value).ToList();
//I want to Zip all my List<int> in totalsValue and put it into listToReturn
List<int> listToReturn = new List<int>();
我想要这样的东西:http://linqsamples.com/linq-to-objects/other/Zip-lambda-csharp但是在这个例子中,列表是分开的。 我的列表是&gt; 其中listToReturn表示要返回的列表。
有人可以帮助我吗?
结果: adventest也是List和agiltest enter image description here
答案 0 :(得分:0)
我认为您正在寻找SelectMany
:
List<int> listToReturn= totals = Totals.Where(x => x.Key == myGuid)
.SelectMany(s => s.Value)
.ToList();
您要做的是将所有列表展平为一个序列,这就是SelectMany
扩展方法的作用。另一方面,Zip
将第一个序列的每个元素与第二个序列中具有相同索引的元素合并,换句话说,它允许您从两个相同长度的序列进行投影。
现在我明白你想要实现的目标:
var lists= Totals.Where(x => x.Key == myGuid).Select(e=>Value).ToList();// Select the lists
if(lists.Count>0)
var result= Enumerable.Range(0, lists[0].Count).Select(i=> lists.Sum(l=>l[i]));
使用此解决方案,您需要确保所有选定列表具有相同的大小。我非常确定有一个更优雅的解决方案,但现在我想起来了。如果我想更好的东西,我会更新我的答案