C#循环将int乘以降低

DaR*_*RkS -1 c# for-loop multiplying

我有以下数组:

int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };
Run Code Online (Sandbox Code Playgroud)

我想知道该怎么做:

  • 使用myArray1和myArray2之和创建一个新数组
  • 通过减去myArray1和myArray2创建一个新数组
  • 使用myArray1和myArray2的乘法创建一个新数组

总和的结果将是:

int[,] myArray3 = new int[2, 3] { { 7, 6, 0 }, { -4, 4, 0 } };
Run Code Online (Sandbox Code Playgroud)

减法结果将是:

int[,] myArray3 = new int[2, 3] { { 5, 2, 6 }, { 12, 8, 16 } };
Run Code Online (Sandbox Code Playgroud)

乘法的结果将是:

int[,] myArray3 = new int[2, 3] { { 6, 8, 9 }, { 32, 12, 64 } };
Run Code Online (Sandbox Code Playgroud)

这可以类似于使用for循环打印出数组吗?我试过寻找例子,但没有发现我可以用于我的具体问题.

Ben*_*hon 7

我经常尝试使用LINQ,但我发现只能使用循环.

int[,] myArray3 = Compute(myArray1, myArray2, (x,y) => x+y);
int[,] myArray4 = Compute(myArray1, myArray2, (x,y) => x-y);
int[,] myArray5 = Compute(myArray1, myArray2, (x,y) => x*y);


int[,] Compute(int[,] a, int[,] b, Func<int,int,int> operation)
{
    int cols = a.GetLength(0);
    int rows = a.GetLength(1);
    int[,] result = new int[cols,rows];

    for(int col=0; col<cols ; col++)
    {
        for(int row=0; row<rows ; row++)
        {
            result[col,row] = operation(a[col,row], b[col,row]);
        }
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

Func<int,int,int>是一个带有delegate两个int参数并具有int返回值的.A delegate就像方法的"句柄"或"指针".

然后你可以简单地调用operation()调用作为参数传递的方法.

这里我使用以下lambda表达式:

  1. (x,y) => x+y 计算添加
  2. (x,y) => x-y 计算减法
  3. (x,y) => x*y 计算乘法

所有这些都作为operation参数传递,因此可以从内部调用它们Compute().编译器自动Func<int,int,int>从这些lambda 创建.

这样您就可以使用相同的Compute()方法来应用各种操作.