【问题标题】:I need to create 2D array in C#我需要在 C# 中创建二维数组
【发布时间】:2011-04-22 08:29:56
【问题描述】:

我需要创建二维锯齿状数组。想想一个矩阵。行数已知,列数未知。例如,我需要创建 10 个元素的数组,其中每个元素的类型为 string[]。为什么我需要那个?列数未知 - 此函数必须简单地进行分配并将数组传递给其他函数。

string[][] CreateMatrix(int numRows)
{
 // this function must create string[][] where numRows is the first dimension.
}

更新

我有 C++ 背景。在 C++ 中,我会编写以下内容(不要介意语法)

double ** CreateArray()
{
 double **pArray = new *double[10]() // create 10 rows first
}

更新 2

我正在考虑使用 List,但我需要对行和列进行索引访问。

【问题讨论】:

  • 你到底遇到了什么困难?
  • 我建议使用 List 而不是数组
  • 列表为您提供对两者的索引访问。所以如果你使用new List<List<string>>,你可以像myList[0][2]一样访问它
  • 感谢 Jamiec,会试一试。我不知道 List 提供索引访问。

标签: c# .net arrays multidimensional-array


【解决方案1】:

你可以写:

string[][] matrix = new string[numRows][];

这将产生一个由null 元素组成的二维数组。如果你想用非空项填充数组,你需要写:

for (int row = 0; row < numRows; row++)
{
    matrix[row] = new string[/* col count for this row */];
}

需要指定矩阵每一行的列数。如果你事先不知道,你也可以。

  1. 保留未初始化的矩阵项,并在您知道它们的大小时填充它们。
  2. 使用一个固定的数字,为您提供足够的空间来容纳最大可能的大小。
  3. 按照此处其他人的建议,避免使用数组并使用 List&lt;&gt;

希望这会有所帮助。

【讨论】:

  • 谢谢 Cesar,所以我有两个 System.Array 引用选项 - 要么将 keep 设置为 null,要么将其设置为已知大小的 System.Array。
【解决方案2】:

return new string[numRows][];

【讨论】:

  • 对我来说编译OK!使用 Visual Studio 2008 和 .NET 3.5。
  • 这确实是 OP 所要求的,也是 imo 的正确解决方案。 +1(任何可以编译的)
【解决方案3】:

无法完成。但是你可以这样做:

List<List<string>> createMatrix(int numRows)
{
     return new List<List<string>>(numRows);
}

这使您能够在第二个维度中拥有灵活数量的对象。

【讨论】:

  • 想解释一下为什么你认为它不能完成? .NET 支持数组数组,这是 OP 所要求的。
  • 编译时出错,试试看。。必须提供第二个边界
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2020-05-20
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多