通过其方法.Add将2D数组添加到Container类中

时间:2019-03-05 14:54:14

标签: c# arrays multidimensional-array containers

我无法将2D数组添加到我的容器类中。帮助将不胜感激

这是我的容器类:

 class Container
{
    string[,] Matrix;
    public int Rows { get; private set; }
    public int Columns { get; private set; }


    public Container(int rows, int columns)
    {
        Rows = rows;
        Columns = columns;
        Matrix = new string[Rows, Columns];
    }

    public void Add(string[,] s1, int height, int width)
    {
        Matrix[Rows++, Columns++] = s1[height, width];
    }

    public string Take(int height, int width)
    {
        return Matrix[height, width];
    }

错误:

  

未处理的异常:System.IndexOutOfRangeException:索引超出数组的范围。

     

在ConsoleApp1.Container.Add(String [,] s1,Int32高度,Int32宽度)在C:\ Users \ Justas \ Desktop \ Bandymas \ ConsoleApp1 \ Program.cs:line 26中      在C:\ Users \ Justas \ Desktop \ Bandymas \ ConsoleApp1 \ Program.cs:line 92中的ConsoleApp1.Program.Read(Int32 n,Container Matrix)      在C:\ Users \ Justas \ Desktop \ Bandymas \ ConsoleApp1 \ Program.cs:line 45中的ConsoleApp1.Program.Main(String [] args)中   按任意键继续 。 。

当我尝试使用容器类方法.Add添加2D数组时发生错误:

        Matrix.Add(array, rowLength, colLength);

这是二维数组的样子:

string[,] array = new string[n, n];

        var list = Enumerable
        .Range(0, file.Length / n)
        .Select(i => file.Substring(i * n, n))
        .ToList();

        var res = string.Join(Environment.NewLine, list);
        for (int i = 0; i < n; i++)
        {
            char[] row = list[i].ToCharArray();
            for (int j = 0; j < n; j++)
            {
                array[i, j] = row[j].ToString();
            }
        }

        int rowLength = array.GetLength(0);
        int colLength = array.GetLength(1);

这是我的2D数组的样子:

    Berzas,su
    la;;sula;
    ;klevu sa
    ldial lap
    asula  a 
      aula, a
    r  suart 
    zemes vai
    kai du   

这是一个9x9的数组,我正尝试将其添加到我的容器中

我们将不胜感激

1 个答案:

答案 0 :(得分:1)

如果我能正确理解(不确定),那么您想做的就是通过在原始矩阵的对角线中添加一个元素来增加2D数组:

例如:

row = 2
column = 2


    Matrix = |'str1' | 'str2'|     s = |'str10' | 'str11' |
             |'str3' | 'str4'|         | ...    | ...    |

因此,当调用Container.Add(s,0,0)时,预期的结果将是

Matrix = |'str1' | 'str2'| empty |    
         |'str3' | 'str4'| empty |
         |empty  | empty | 'str10'|

据我了解,您的代码是否正确(也许我错了)。然后,出现错误,因为在Matrix数组为2x2时尝试访问Matrix [2,2],因此没有第三列。一种解决方案是

public void Add(string[,] s1, int height, int width)
{
    # Create a new Array
    var newMatrix = new string[Rows++,Columns++]

    # Pass the old array to the new one
    for(i=0;i<Rows-1;i++)
    {
        for(j=0;j<Columns-1;j++)
        {
           newMatrix[i,j] = Matrix[i,j];
        }
    }

    # Add the new element
    newMatrix[Rows, Columns] = s1[height, width];

    # Then make the new matrix the good one
    Matrix = newMatrix; 
}

我希望这是有用的,如果我错了,我将确保对其进行更改。

编辑:

好吧,现在我想我明白了,您想要的是将数组存储到容器类中,而不是添加元素。因此,您应该做的是

public void Add(string[,] s1, int height, int width)
{
    Matrix  = s1;
    Rows = height;
    Columns = width;
}

也许我已经简化了。让我知道