C# 更改数组中的维数

标签 c# arrays

是否可以在 C# 中将多维数组转换为一维数组,而不必将所有元素从一个数组复制到另一个数组,例如:

int[,] x = new int[3,4];
int[] y = (int[])x;

这将允许将 x 用作 12 元素的一维数组(并从函数中返回它),但编译器不允许这种转换。

据我所知,二维数组(或更高维度的数组)被放置在连续的内存中,因此它似乎并非不可能以某种方式工作。使用 unsafefixed 可以允许通过指针访问,但这无助于将数组作为 1D 返回。

虽然我相信在我目前正在处理的情况下我可以只使用一维数组,但是如果这个函数是返回多维数组的东西和需要一维的。

最佳答案

你不能,在 C# 中不可能以这种方式转换数组。您也许可以通过使用外部 dll (C/C++) 来完成此操作,但是您需要将数组保持在固定位置。

速度

通常我会建议避免使用二维数组,因为这些在 C# 中很慢,最好使用锯齿状数组或更好的单维数组。

Int32[] myArray = new Int32[xSize * ySize];

// Access
myArray[x + (y * xSize)] = 5;

关于C# 更改数组中的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664029/

相关文章:

java - 将用户输入保存到数组中并确保它不违反索引

在 C 中创建结构体数组?

c# - 结合 .net 正则表达式

c# - 如何正确地将实现细节分离到 .net 中的类库中

c# - mongoDB 像 SQL 一样运行查询!

c# - 将 C# 函数转换为 VB.Net、Lambda 问题和最佳转换方式

c# - 我想让面板有一个粗边框。我能以某种方式设置它吗?

arrays - 垂直和水平连接 numpy 数组

java - 如何从 HashMap 中删除值?

php - 将内爆数组从mysql拆分为php中的变量