1

再会,

通常我创建二维数组如下:

string [,] arr = new string [9,4];

这是一个 9 行 4 列的二维数组。

我想问一下,如何创建任意长度的二维数组。例如,不需要将行设置为 9,它可以是任意数字,视情况而定。

4

3 回答 3

4

简单List<List<T>>呢?

这就像一个概念,您自然可以将其包装在您的自定义类中,因此您的 API 的使用者不会看到这些奇怪的嵌套声明。

public class Matrix {

   private mtx = new List<List<T>>(); 


   public void Append(T value) {
      .....
   }  

   public void InsertAt(T value, int row, int column) {
      ....
   }

}
于 2013-06-25T07:49:01.303 回答
2

为此,您必须使用List<List<string>>实例。现在您可以动态添加您想要的任何内容,但这也比数组格式有缺点,如果您已达到最大行数或列数,您需要自行检查。

于 2013-06-25T07:50:38.760 回答
0

这个Matrix类是空间(基于访问模式)和性能高效:

class Matrix<T>
{
    readonly Dictionary<int, Dictionary<int, T>> _rows = new Dictionary<int, Dictionary<int, T>>();

    public T this[int i, int j]
    {
        get
        {
            var row = ExpandOrGet(j);
            if (!row.ContainsKey(i)) row[i] = default(T);

            UpdateSize(i, j);

            return row[i];
        }
        set
        {
            ExpandOrGet(j);
            _rows[j][i] = value;

            UpdateSize(i, j);
        }
    }

    void UpdateSize(int i, int j)
    {
        if (j > SizeRows) SizeRows = j;
        if (i > SizeColums) SizeColums = i;
    }

    public int SizeRows { get; private set; }
    public int SizeColums { get; private set; }

    Dictionary<int, T> ExpandOrGet(int j)
    {
        Dictionary<int, T> result = null;

        if (!_rows.ContainsKey(j))
        {
            result = new Dictionary<int, T>();
            _rows[j] = result;
        }
        else result = _rows[j];

        return result;
    }
}

尽管您可以添加更多实用程序来促进您的工作流程。

于 2013-06-25T08:34:24.637 回答