C# 将矩阵乘以平行C中的标量向量#
我有两个数组字典,它们相乘并存储在字符串字典和int[]中。代码是有效的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
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
保持线程安全。