我有一个int数组列表。列表可以是1到4个数组。 我想知道如何用各个线程和每个数组求和 将求和值放入新的int数组中。
答案 0 :(得分:2)
如果新阵列的顺序不重要,那么你有一个例子
List<int[]> arraysList = new List<int[]>();
arraysList.Add(new int[] { 2, 3, 5 });
arraysList.Add(new int[] { 2, 3, 5, 9, 123, 5 });
arraysList.Add(new int[] { 3 });
arraysList.Add(new int[] { 9,8 });
ConcurrentBag<int> SummedValueOfEveryArray = new ConcurrentBag<int>();
Parallel.ForEach(arraysList, array =>
{
SummedValueOfEveryArray.Add(array.Sum());
});
//Your result
var result = SummedValueOfEveryArray.ToArray<int>();
//The sum of all arrays
var totalSum = SummedValueOfEveryArray.Sum();
答案 1 :(得分:2)
此代码将按您的要求执行。然而,一方面注意到,只有当.Net认为它可以提高性能时,这才会平行化。
List<int[]> intlist = new List<int[]>();
int[] result = intlist.AsParallel().Select(arr => arr.Sum()).ToArray();
鉴于1到4个阵列,可能是.Net从未看到并行化的重点。但是如果你绝对必须使用Parallel.For强制并行化,如下所示。
List<int[]> intlist = new List<int[]>();
int[] result = new int[intlist.Count];
Parallel.For(0, intlist.Count, i =>
{
result[i] = intlist[i].Sum();
});