在C#控制台应用程序中使用每个数组的线程总结一个整数数组列表

时间:2017-01-04 11:42:24

标签: c# arrays multithreading

我有一个int数组列表。列表可以是1到4个数组。 我想知道如何用各个线程和每个数组求和 将求和值放入新的int数组中。

2 个答案:

答案 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();
});