2017-01-04 3 views
0

私はint配列のリストを持っています。リストは1〜4のアレイであり得る。 個々のスレッドで各配列を合計する方法と、加算された値を新しいint配列に配置することについては、 を知りたいと思います。C#コンソールアプリケーション内の各配列のスレッドを使用した整数配列のリストの集計

+1

"summed value"または "summed values"?違いが生じます。コードのアウトラインを提供することに害はありません。 –

+0

申し訳ありませんが、合計値は –

+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(); 
+0

ありがとうございます。可能であれば、私は標準化されたスレッド方法を望んでいました。 –

+0

@RyanRichard「標準化法」とはどういう意味ですか? ここにはすべての配列のための1つのシアードがあります(4または4000があるかどうかは関係ありません) PS:prof1990の答えは最終的な配列の順序が保たれているのでいいです – user244943

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(); 
}); 
+0

"与えられた1から4の配列には非常に小さな点があります。 " - 非常に間違っています。予想される利得は、それらのアレイの長さだけに依存する。 –

+0

ポイント、それを変えて、私が執筆中に寝ていたと思う – prof1990

関連する問題