【问题标题】:Creating a dynamically sized matrix in C#在 C# 中创建动态大小的矩阵
【发布时间】:2016-03-04 13:56:06
【问题描述】:

我正在开发一个将计算一些值的 C# 应用程序。我需要将这些值放在 x×x 字符串数组中。例如,如果我知道“x”是,我知道我可以这样做:

string[,] matrix = new string[3, 3]; 

不幸的是,我不知道“x”会是什么。有没有办法在 C# 中动态增长矩阵?如果有,怎么做?

【问题讨论】:

标签: c#


【解决方案1】:

您可以使用变量定义数组的大小,然后在运行时更改它们的值

int arrayWidth = 3;
int arrayHeight = 3;
string[,] matrix = new string[arrayWidth, arrayHeight]; 

然而,正如 darin 所指出的,数组不能调整大小;因此,请确保在确认您的大小值之前保留初始化。

【讨论】:

    【解决方案2】:

    不,在 C# 中,数组是静态大小的。它们不能在运行时重新调整大小,除非您声明一个具有新大小的新数组,然后将元素从旧数组复制到新数组(这取决于您的特定需求可能是否可行)。所以基本上你可以使用 .NET 中的一些动态列表结构,例如IList<T>,它允许你在运行时动态地向其中添加元素。当然没有奇迹,在幕后List<T> 将使用 .NET 数组来支持数据,除了它会在您动态地向这个结构中添加元素时智能重新调整它的大小.

    【讨论】:

    • 不。您可以使用静态方法 Array.Resize 在 c# 中调整数组的大小
    • 当然。你读过这个方法的documentation吗?如果您还没有引用它:This method allocates a new array with the specified size, copies elements from the old array to the new one, and then replaces the old array with the new one.array must be a one-dimensional array. 那么让我们再次重复我已经在这里提供的答案。在 .NET 数组中,静态大小并且不能在运行时重新调整大小,除非您声明一个具有新大小的新数组并将所有元素从旧数组复制到新数组。
    • 所以@nicolay.anykienko,你能解释一下你对这个答案的反对意见吗?您认为我的回答如何提供错误的信息(通常是反对票的情况)。
    • 您对 Array.Resize 方法的行为是正确的。抱歉,我将删除不赞成票。但是,关于 Array.Resize 的信息在您的回答中并不过分。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多