C# 将矩阵乘以平行C中的标量向量#

C# 将矩阵乘以平行C中的标量向量#,c#,arrays,dictionary,parallel-processing,iterator,C#,Arrays,Dictionary,Parallel Processing,Iterator,我有两个数组字典,它们相乘并存储在字符串字典和int[]中。代码是有效的 public class Program { public static void Main(string[] args) { int[] a = {1,0,3,4,0}; int[] b = { 3, 0, 9, 10, 0}; int[] c = {2,3,3,5,0}; var ret = new Dictionary<string

我有两个数组字典,它们相乘并存储在字符串字典和int[]中。代码是有效的

public class Program
{
    public static void Main(string[] args)
    {
        int[] a = {1,0,3,4,0};
        int[] b = { 3, 0, 9, 10, 0};
        int[] c = {2,3,3,5,0};
        var ret = new Dictionary<string, int[]>();
        ret.Add("Jack", a);
        ret.Add("Jane", b);
        ret.Add("James", c);

        var multipliers = new Dictionary<string, int>();
        multipliers.Add("Jack", 2);
        multipliers.Add("Jane", 3);
        multipliers.Add("James", 5);

        var results = new Dictionary<string, int[]>();

        foreach (var item in ret)
        {
            int[] arr= new int[item.Value.Length];

            for (int i = 0; i < item.Value.Length; i ++)
            {
                int d = item.Value[i] * multipliers[item.Key];

                arr[i] = d;
            }
            results.Add(item.Key,arr);
        }
    }
}
公共类程序
{
公共静态void Main(字符串[]args)
{
int[]a={1,0,3,4,0};
int[]b={3,0,9,10,0};
int[]c={2,3,3,5,0};
var ret=新字典();
补充(“杰克”,a);
加上(“简”,b);
补注(“詹姆斯”,c);
var乘数=新字典();
乘数。加上(“杰克”,2);
乘数。加上(“简”,3);
乘数。加上(“詹姆斯”,5);
var results=newdictionary();
foreach(ret中的var项目)
{
int[]arr=新int[item.Value.Length];
对于(int i=0;i

最有效的方法是什么?有没有并行执行此操作的方法?

以下代码段是并行执行此操作的方法:

var results = new ConcurrentDictionary<string, int[]>();

Parallel.ForEach(ret, pair =>
{
      var srcArr = pair.Value;
      var arr = new int[srcArr.Length];
      var multBy = multipliers[pair.Key];

      for (var i = 0; i < srcArr.Length; i++)
      {
           var d = srcArr[i] * multBy;

           arr[i] = d;
      }
      results[pair.Key] = arr;
});
var results=新的ConcurrentDictionary();
Parallel.ForEach(ret,pair=>
{
var srcArr=pair.Value;
var arr=新整数[srcArr.Length];
var multBy=乘数[pair.Key];
对于(变量i=0;i
我猜这需要一个BackgroundWorker,并且线程安全吗?@ccsv它不需要
BackgroundWorker
并且
ConcurrentDictionary
保持线程安全。