我有一个二维数组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#创建65000x65000阵列吗?我得到了一些“内存不足”错误。
答案 0 :(得分:7)
答案 1 :(得分:3)
您需要使用jagged arrays。
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]);
此外,创建65000x65000阵列将导致65000 ^ 2 = 4225000000个插槽(或大约16GB或数据),因此难怪您获得OutOfMemoryException
。
答案 2 :(得分:2)
为了回答你的第二个问题,一个65k x 65k的二维阵列有超过40亿个项目;一个4字节的整数类型的时钟大小约为16GB。如果你的盒子上没有足够的内存来初始化16GB的内存块,那么,不,你不能创建一个65k x 65k的阵列。这甚至不会解决您尝试在该阵列上进行查找时遇到的寻址问题。太大了,伙计。太大。
要回答第一个问题,二维数组是一个与一维数组不兼容的独特结构。如果你创建一个锯齿状数组(这是一个数组数组),你将能够做你想要的。
答案 3 :(得分:1)
一个65000乘65000的int
数组会占用大约16千兆字节的内存,因此出现内存不足的错误并不奇怪。我上次尝试时无法让一个.NET 3.5应用程序分配超过1.7GB的内存,所以没有运气。
至于将一个维度传递给函数,它取决于。您可以使用jagged array:
执行所需操作int[][] array = new int[3][];
for (int i = 0; i < array.Length; i++)
array[i] = new int[3];
string b = concatenate(array[0]);
这样,第一维中的每个位置都是它自己的数组,你可以传递它(如在最后一行中)。如果你想在另一个'方向'传递一行项目,你必须先复制项目。
PS:您可能希望查看String.Join
和String.Concat
以了解您的连接需求。第二个有很多重载,但你可能需要第一个显示整数。