当前位置: 首页 > 编程语言 > C#

C#三维数组定义问题分享

时间:2023-04-10 20:47:42 C#

C#三维数组定义问题我下面的代码有一个编译错误,错误1cannotimplicitlyconverttype'TestArray1.Foo[,,*]'to'TestArray1.Foo[][][]'C:UserslmaDocumentsVisualStudio2008ProjectsTestArray1TestArray1Program.cs1730TestArray1有人有什么想法吗?这是我的全部代码,我使用的是VSTS2008+Vista64位。命名空间TestArray1{classFoo{}classProgram{staticvoidMain(string[]args){Foo[][][]foos=newFoo[1,1,1];返回;}}}编辑:版本2.i还有另一个版本的代码,但仍然有编译错误。有任何想法吗?错误1??无效的排名说明符:预期的“,”或“]”C:UserslmaDocumentsVisualStudio2008ProjectsTestArray1TestArray1Program.cs1741TestArray1错误2无效的排名说明符:预期的“,”或“]”C:UserslmaDocumentsVisualStudio2008ProjectsTestArray1TestArray1Program.cs1144??TestArray命名空间TestArray1{classFoo{}classProgram{staticvoidMain(string[]args){Foo[][][]foos=newFoo[1][1][1];返回;}}}编辑:版本3.i我想我想要一个锯齿状的数组。在向同行学习后。这是我的代码修复,它在VSTS2008中编译得很好。我想要的是一个锯齿状的数组,目前我只需要一个元素。有人可以检查我的代码是否正确实现了我的目标吗?命名空间TestArray1{classFoo{}classProgram{staticvoidMain(string[]args){Foo[][][]foos=newFoo[1][][];foos[0]=newFoo[1][];foos[0][0]=newFoo[1];foos[0][0][0]=newFoo();返回;}}}George,在此先感谢代码的第2版——抱歉,您不能以这种方式指定锯齿状数组。相反,你需要这样做:Foo[][][]foos=newFoo[1][][];foos[0]=newFoo[1][];foos[0][0]=newFoo[1];基本上,您必须单独填充每个数组。Foo[][][]表示“Foo数组的数组数组”。像这样的初始化语句一次只能初始化一个数组。使用矩形数组,您最终只会得到一个(多维)数组,这就是newFoo[1,1,1]起作用的原因。如果这是真实代码,我建议您至少考虑其他设计决策。数组的数组可能很有用,但您很容易遇到这样的问题。数组的数组更糟。可能有一种更易读的方式来表达您感兴趣的内容。下定决心:)您要么:Foo[,,]foos=newFoo[1,1,1];或者:Foo[][][]foos=newFoo[1][1][1];您正在声明一个双嵌套数组(数组的数组的数组)并分配一个三维数组。两者绝对不同。如果你想要一个真正的三维数组,你可以将声明更改为Foo[,,]foos=newFoo[1,1,1]。在C#中不需要像Java那样的交错数组([][][]类型)。最简单的答案是使用Foo[,,]foos=newFoo[2,3,4];这为您提供了一个3D数组作为2*3*4=24Foo的连续内存块。替代方案如下:Foo[][][]foos=newFoo[2][][];for(inta=0;a虽然这种锯齿状的(=arrayofarrays)方法工作得有点少,但实际上使用起来更快。这是由于编译器中的一个缺陷,在Foo[的情况下访问元素时总是进行范围检查,,]虽然它至少能够优化在Foo[].[][]场景中使用Length属性的循环。另请参阅此问题这两个不同的数组声明创建了非常不同的东西。让我们看一下更简单的情况:Foo[,]twoDimensionArray=newFoo[5,5];这个数组有两个维度——你可以把它想象成一个表。你需要两个轴来返回任何东西:Fooitem=twoDimensionArray[2,3]索引总是具有相同的长度-在本例中为0-4。锯齿状数组实际上是一个数组数组:Foo[][]jaggedArray=newFoo[5][];jaggedArray[0]=newFoo[2];jaggedArray[1]=newFoo[4];...如果你只使用一个轴索引,它将返回一个数组:Foo[]oneRow=jaggedArray[3];如果你同时使用两者,则从子数组中选择:Fooitem=jaggedArray[3][2];//等同于:Fooitem=oneRow[2];这些子数组中的每一个都可以具有不同的长度,甚至可以不进行填充。取决于您是否希望它们呈锯齿状://制作一个5x4x3数组:string[,,]foos=newstring[5,4,3];http://msdn.microsoft.com/en-us/library/aa288453(VS.71).aspx哦,这是初始化值:char[,,]blah=newchar[2,2,2]{{{'1','2'},{'3','4'}},{{'5','6'},{'7','8'}}};请注意,这不起作用:Foo[][][]foos=newFoo[1][1][1];因为您使用的是锯齿状数组语法,它不允许您定义嵌套数组的大小。而是使用这个:Foo[,,]foos=newFoo[1][1][1];//1x1x1或者这个Foo[][][]foos=newFoo[1][][];//1arrayallowingtwonestedlevelsofjaggedarraysfoos[0]=newFoo[1];//对于第一个元素,创建一个嵌套在其中的新数组foos[0][0]=newFoo[1];//创建嵌套在it语句中的第三级新数组,如果它意味着什么,则仅适用于C#:int[,,]ary=newint[,,]{{{111,112},{121,122},{131,132}},{{211,212},{221,222},{231,232}},{{311,312},{321,322},{331,332}},{{411,412},{421,422},{431,432}}};数组初始化int[,,]array3D=newint[,,]{{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}}来源:多维数组(C#编程指南)以上就是C#学习教程的全部内容:C#三维数组定义问题分享,如果对你有用还需要了解更多C#学习教程,希望你会多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: