镜像2D数组:“无法将类型'double'隐式转换为'double [*,*]'”

时间:2013-12-02 21:20:41

标签: c# arrays

我有一个数组,它将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;
    }

我收到的错误是:

enter image description here

我正在有效地获取第一行,并反转它的顺序,并返回反向行数组。也许是我对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方法。

2 个答案:

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