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)
我想知道该怎么做:
总和的结果将是:
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循环打印出数组吗?我试过寻找例子,但没有发现我可以用于我的具体问题.
我经常尝试使用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表达式:
(x,y) => x+y 计算添加(x,y) => x-y 计算减法(x,y) => x*y 计算乘法所有这些都作为operation参数传递,因此可以从内部调用它们Compute().编译器自动Func<int,int,int>从这些lambda 创建.
这样您就可以使用相同的Compute()方法来应用各种操作.