从锯齿状数组(int [*,*])到2d数组(int [] [])的转换类型

时间:2017-05-20 20:08:11

标签: c# multidimensional-array casting

如何将int []转换为int [] []

当我尝试时,发生以下错误。
无法隐式将类型" int[*,*]转换为int[][]"

我的目标是首先创建一个Jagged数组,然后将其转换为二维数组。

 private int[][] initStaticBoard()
    {

        int[,] board = new int[,] {
            {0,0,0,0,0},
            {0,0,0,0,0},
            {0,0,0,0,0},
            {0,0,0,0,0},
            {0,0,0,0,0}
        };
        int[][] result = board; 

        return result*emphasized text*;
    }

2 个答案:

答案 0 :(得分:4)

正方形数组和锯齿状数组之间没有强制转换。您必须将board重建为锯齿状数组:

public static T[][] SquareArrayToJAggedArray<T>(T[,] square)
{
    T[][] jagged = new T[square.GetLength(0)][];

    for (int i = 0; i < jagged.Length; i++)
    {
        jagged[i] = new T[square.GetLength(1)];

        for (int j = 0; j < jagged[i].Length; j++)
        {
            jagged[i][j] = square[i, j];
        }
    }

    return jagged;
}

并称之为:

private int[][] initStaticBoard()
{
    int[,] board = new int[,] {
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0}
    };

    int[][] result = SquareArrayToJaggedArray(board); 
    return result;
}
但是,我不会担心转换,而是建议您选择其中一个并坚持下去。在两者之间进行转换涉及为新数组分配新内存,如果您处理大型数组或转换过于频繁,则可以加快速度。此外,由于重建,对新阵列的更改不会影响旧阵列,反之亦然。

如果您所表示的数据是具有固定宽度和长度的结构,则使用方阵。如果不同的子阵列具有不同的长度,请使用锯齿状阵列。

答案 1 :(得分:0)

Jagged数组可以像这样初始化:

let alert = UIAlertController(title: "Reminder", message: "Your reminder text", preferredStyle: UIAlertControllerStyle.alert)
    alert.addAction(UIAlertAction(title: "Sure!", style: UIAlertActionStyle.default) {
        (finished) in
        self.didReceiveRemoteNotificationAction()
    })
    self.present(alert, animated: true, completion: nil)