Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将二维数组的一维表示为新数组_C# - Fatal编程技术网

C# 将二维数组的一维表示为新数组

C# 将二维数组的一维表示为新数组,c#,C#,我有一个2d数组a[3,3]。如何将一维表示为新数组并将其传递给某个函数 int[,] a = new int[3,3]; a[0,0] = 1; ... string b = concatenate(a[0]); // where concatenate is a function // take a one dimension array as param 另外,我可以用C#创建一个65000x6500数组吗

我有一个2d数组
a[3,3]
。如何将一维表示为新数组并将其传递给某个函数

int[,] a = new int[3,3];

a[0,0] = 1;

...

string b = concatenate(a[0]);     // where concatenate is a function
                                  // take a one dimension array as param

另外,我可以用C#创建一个65000x6500数组吗?我遇到了一些“内存不足”错误。

处理此问题的最简单方法是创建一个

这样:

string b=concatenate(i[0])将起作用


对于第二个问题,您将遇到接近该大小的对象的问题。但这可能不是你的问题。我想寻找一个可能的解释来解释原因。

回答你的第二个问题,一个65k x 65k的二维数组有40多亿个项目;一个4字节整数类型的时钟大小大约为16GB。如果您的机箱上没有足够的内存来初始化16GB内存块,则无法创建65k x 65k阵列。这甚至不需要解决您在查找该阵列时遇到的问题。太大了,伙计。太大了

要回答第一个问题,二维数组是与一维数组不兼容的唯一构造。如果您创建一个锯齿状数组(这是一个数组数组),您将能够执行您想要的操作

您需要使用


另外,创建65000x65000数组将产生65000^2=4225000000个插槽(或大约16GB或数据),因此难怪会出现
OutOfMemoryException

一个65000×65000的
int
数组将占用大约16GB的内存,因此出现内存不足错误也就不足为奇了。上次尝试时,我无法让一个.NET3.5应用程序分配超过1.7GB的内存,所以运气不好

至于将一维传递给函数,这取决于。您可以使用以下工具来做您想做的事情:

int[][]数组=新的int[3][];
for(int i=0;i
这样一来,第一维度中的每个位置都是它自己的数组,您可以传递它(如最后一行)。如果您想在另一个“方向”传递一行项目,则必须首先复制项目


PS:您可能需要查看和,以满足您的连接需求。第二个有很多重载,但是您可能需要第一个来显示整数。

亲爱的用户208080!这个网站是一个社区,而不仅仅是一个获得帮助的地方。请遵守规则。您提出了5个问题,但未将任何答案标记为已接受。感恩吧!并格式化您的代码!65000x65000 int array=15.7393515 GB内存中一次。是的,如果您有足够的空闲内存,您可以这样做,但现在的问题是您是否应该这样做;)“你们想解决什么问题?”朱丽叶在32位系统中,你们不能,即使你们有那个么多的物理记忆,你们也不能。现在可以了。谢谢你的帮助。非常感谢你的回答。我真的很感激。@user208080:不客气。习惯上,投票选出有用的答案,并将最好的答案标记为被接受的答案。不是说那是我的,但是如果你接受有用的答案,你将来更有可能得到帮助。同时,它也为其他人提供了一个更好的参考网站。他们不必阅读所有答案,因为最好的答案在列表的顶部:)@Andrey:heh。。。很好。我应该说“40亿件”。我会适当地编辑。
int[][] i = new int[3][];
int[][] a = new int[3][]
a[0] = new int[3];
a[1] = new int[3];
a[2] = new int[3];
a[0][0] = 1;
string b = concatentate(a[0]);
int[][] array = new int[3][];
for (int i = 0; i < array.Length; i++)
    array[i] = new int[3];

string b = concatenate(array[0]);