我坚持使用List<List<int>>
的方法,并希望获取每个索引的每个List<int>
的值并将它们加在一起。
具体来说:
intList1[0] + intList2[0] + intList3[0]
intList1[1] + intList2[1] + intList3[1]
虽然每个列表中的列表数量和项目数量都不固定。
结果应为List<int>
,其中包含每个总和。
答案 0 :(得分:3)
您可以通过lists
将所有SelectMany
合并在一起,然后按照初始index
对其进行分组,然后进行Sum()
计算:
var answer = lists.SelectMany(x => x.Select((item,index) => new {item,index}).ToList())
.GroupBy(x => x.index).Select(x => x.Sum(y => y.item)).ToList();
答案 1 :(得分:0)
使用与子列表中元素的最大数量相同的大小初始化结果列表,然后只需循环到子列表中即可汇总不同的值。
int maximumNumberElements = listContainer.Max(l => l.Count);
List<int> resultList = new List<int>();
for(int i = 0; i < maximumNumberElements; i++)
{
resultList.Add(0);
}
for(int i = 0; i < listContainer.Count; i++)
{
for(int j = 0; j < listContainer[i].Count; j++)
{
resultList[j] += listContainer[i][j];
}
}
答案 2 :(得分:0)
我喜欢这些问题的字典方法,你也可以存储一些有趣的东西以及字典的价值,例如,总结该索引的项目数等。
// Dictionary of indexes to sums
var sums = new Dictionary<int, int>();
// Iterate your lists.
foreach(var list in lists) {
for (var i = 0; i < list.Count; i++) {
// For the given index, sum up the values in the dictionary.
if (sums.TryGetValue(i, var out value) == false) sums[i] = 0;
sums[i] = sums[i] + list[i];
}
}
答案 3 :(得分:0)
如果列表较大,另一种解决方案可能会更好
public static IEnumerable<int> ListSum(IEnumerable<IEnumerable<int>> ll)
{
var resultList = new List<int>();
var enumerators = ll.Select(l => l.GetEnumerator()).ToArray();
bool stillResult;
do
{
stillResult = false;
var sum = 0;
foreach (var e in enumerators)
{
if (e.MoveNext())
{
sum += e.Current;
stillResult = true;
}
}
resultList.Add(sum);
} while (stillResult);
return resultList;
}