再会,
通常我创建二维数组如下:
string [,] arr = new string [9,4];
这是一个 9 行 4 列的二维数组。
我想问一下,如何创建任意长度的二维数组。例如,不需要将行设置为 9,它可以是任意数字,视情况而定。
再会,
通常我创建二维数组如下:
string [,] arr = new string [9,4];
这是一个 9 行 4 列的二维数组。
我想问一下,如何创建任意长度的二维数组。例如,不需要将行设置为 9,它可以是任意数字,视情况而定。
简单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) {
....
}
}
为此,您必须使用List<List<string>>
实例。现在您可以动态添加您想要的任何内容,但这也比数组格式有缺点,如果您已达到最大行数或列数,您需要自行检查。
这个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;
}
}
尽管您可以添加更多实用程序来促进您的工作流程。