Sum,Subtract和Multiply数组

时间:2012-12-18 07:33:15

标签: c#

我有以下数组:

int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };

我想知道该怎么做:

  1. 使用myArray1和myArray2的总和创建一个新数组
  2. 使用myArray1和myArray2的减法创建一个新数组
  3. 使用myArray1和myArray2
  4. 的乘法创建一个新数组

    总和的结果将是:

    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循环打印数组吗?我试过寻找例子,但没有发现我可以用于我的具体问题。

5 个答案:

答案 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