我有一个数组,它将2D数组作为输入,然后翻转它。例如:
输入:
0 1 0
0 2 0
0 3 4
输出:
0 3 4
0 2 0
0 1 0
附加方法
static double[,] flipArray(double[,] inputArray) {
for (int i = 0; i < (inputArray.Length / 2); i++) {
double temp = inputArray[i,0];
inputArray[i, 0] = inputArray[inputArray.GetLength(0)-i-1,0];
inputArray[inputArray.GetLength(0)-i-1,0] = temp;
}
return inputArray;
}
我收到的错误是:
我正在有效地获取第一行,并反转它的顺序,并返回反向行数组。也许是我对C#的一些基本语法的误解,因为我主要是Java开发人员。谢谢!
第二次编辑:
public static void flipInPlace(Object[][] theArray) {
for(int i = 0; i < (theArray.length / 2); i++) {
Object[] temp = theArray[i];
theArray[i] = theArray[theArray.length - i - 1];
theArray[theArray.length - i - 1] = temp;
}
}
上述方法改编自上述thread的Java方法。
答案 0 :(得分:2)
double[,]
表示一个数组,但您只需要存储一个值。将temp
设为简单的double
:
static double[,] flipArray(double[,] inputArray) {
for (int i = 0; i < (inputArray.Length / 2); i++) {
double temp = inputArray[i,0];
inputArray[inputArray.Length - i - 1,0] = temp;
}
return inputArray;
}
但您的代码中仍有更多问题。你必须遍历列和行。另外,您需要使用GetLength(n)
而不是Length
。最后,它应该看起来像这样:
static double[,] flipArray(double[,] inputArray) {
int height = inputArray.GetLength(0);
int width = inputArray.GetLength(1);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height / 2; j++) {
double temp = inputArray[j, i];
inputArray[j, i] = inputArray[height - j - 1, i];
inputArray[height - j - 1, i] = temp;
}
}
return inputArray;
}
答案 1 :(得分:0)
为了得到描述的结果,我认为你想要一些这样的效果,抓住每个子数组而不是单个元素,并记住在inputArray [i]和inputArray设置值[inputArray.Length - i - 1]:
static double[,] flipArray(double[,] inputArray) {
for (int i = 0; i < (inputArray.Length / 2); i++) {
double[] temp = inputArray[i];
inputArray[i] = inputArray[inputArray.Length - i - 1];
inputArray[inputArray.Length - i - 1] = temp;
}
return inputArray;
}