美好的一天,
通常我按如下方式创建2D数组:
string [,] arr = new string [9,4];
这是一个包含9行和4列的2D数组。
我想问一下,如何创建任意长度的2D数组。 例如,将行设置为9并不是必须的,它可以是任何数字,具体取决于具体情况。
答案 0 :(得分: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) {
....
}
}
答案 1 :(得分:2)
为此您必须使用List<List<string>>
实例。现在你可以动态添加你想要的任何东西了,但是如果你已经达到最大行数或列数,那么你需要自己检查的数组格式也有缺点。
答案 2 :(得分: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;
}
}
虽然您可以添加更多实用程序以方便您的工作流程。