我有以下数组:
int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };
我想知道该怎么做:
总和的结果将是:
int[,] myArray3 = new int[2, 3] { { 7, 6, 0 }, { -4, 4, 0 } };
减法结果如下:
int[,] myArray3 = new int[2, 3] { { 5, 2, 6 }, { 12, 8, 16 } };
乘法结果为:
int[,] myArray3 = new int[2, 3] { { 6, 8, 9 }, { 32, 12, 64 } };
这可以类似于使用for循环打印数组吗?我试过寻找例子,但没有发现我可以用于我的具体问题。
答案 0 :(得分:4)
int[,] a3 = new int[2,3];
for(int i = 0; i < myArray1.GetLength(0); i++)
{
for(int j = 0; j < myArray1.GetLength(1); j++)
{
a3[i,j] = myArray1[i,j] + myArray2[i,j];
a3[i,j] = myArray1[i,j] - myArray2[i,j];
a3[i,j] = myArray1[i,j] * myArray2[i,j];
}
}
显然需要在进行新计算之前存储a3
答案 1 :(得分:2)
Sum :
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
myArray3[i, j] = myArray1[i, j] + myArray2[i, j];
}
}
减法:
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
myArray3[i, j] = myArray2[i, j] - myArray1[i, j];
}
}
乘法:
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
myArray3[i, j] = A[i, j] * B[i, j];
}
}
答案 2 :(得分:1)
如果您想更快进行数组操作,请使用 System.Threading.Tasks 中的 C# Parallel.For 循环:
对于简单的算术并行化,外循环比在现代 PC 处理器上快得多。对于更复杂的操作,或者对于较小的数组大小,并行版本可能由于各种原因而变慢。
因此,使用秒表为您的矩阵运算计时,并使用最快的解决方案。如果实施得当,并行化可以使在 C# 中进行数组/图像处理 的速度更快。
当心算术运算后数据类型溢出以及在多个线程之间共享变量(请参阅System.Threading.Interlocked以获得帮助)...
下面的减法。加法和乘法类似:
Parallel.For(0, array.GetLength(1), y=>
{
for (int x = 0; x < array.GetLength(0); x++)
{
difference[x,y] = minuend[x,y] - subtrahend[x,y];
}
}
});
答案 3 :(得分:0)
是的,这就像使用for循环打印数组一样
c#有foreach循环,更容易使用
注意:我认为这是为了完成家庭作业,所以我不打算给出一个100%结论性的答案。
int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };
foreach (int[] a1 in myArray1)
{
foreach(int i in a1)
{
//operation here
//you get the idea
}
}
我发现在c#数组中有一些恐龙,我更喜欢列表。
答案 4 :(得分:0)
如果要使用for循环,可以按如下方式遍历multi-d数组的行/列:
for (int i = 0; i < myArray1.GetLength(0); i++)
{
for (int j = 0; j < myArray1.GetLength(1); j++)
{
// Here, you can access the array data by index, using i and j.
// Ex, myArray1[i, j] will give you the value of 1 in the first iteration.
}
}
注意:将值传递给Array的GetLength方法时,它表示数组的维度。见http://msdn.microsoft.com/en-us/library/system.array.getlength.aspx