为什么C#中的锯齿状数组以相反的方式定义?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么C#中的锯齿状数组以相反的方式定义?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1481字,纯文字阅读大概需要3分钟。
内容图文
![为什么C#中的锯齿状数组以相反的方式定义?](/upload/InfoBanner/zyjiaocheng/806/311fb4627f2342a9b35eeb2b9850c4d7.jpg)
假设我有一个名为T的类型.现在让我说我创建了一个T类型的数组,它给了我T [].在代码中,它给出:
var myArray = new T[10];
长度为10.因此,我们可以看到这使得一个包含10个T类型项的数组.如果T是int,string,BinaryWriter或任何标准项,则它可以工作.但是,假设T是一个数组类型,如int []或string [].
然后,如果我们想要定义一个包含10个T(int [])类型项的数组,它应该给出这样的结果:
var myArray = new int[][10];
通过在前面的例子中用int []替换T.但这会产生语法错误,因为C#中的正确语法是:
var myArray = new int[10][];
如果我们遵循第一个例子的逻辑,那么应该给出一个包含未定义数量的包含10个整数的数组的数组.
这同样适用于锯齿状数组的任何维度:
var myArray = new int[][][10];
是错的,因为语法正确的方法是:
var myArray = new int[10][][];
这不是个人偏好或代码风格的争论,而只是逻辑:当我们定义数组类型的数组时,为什么语法不同于我们定义其他任何数组的数组?
解决方法:
这样,初始化语法镜像了访问语法.
var myArray = new int[NUM_ROWS][];
...
/* Initialize rows of myArray */
...
var x = myArray[0][5]; /* Should this be row 0, col 5; or row 5, col 0? */
将myArray [0] [5]解析为(myArray [5])[0]将是违反直觉的,因为索引将从左向右反转,因此我们将myArray [0] [5]解析为(myArray的[0])[5].
因此,在myArray [i] [j]中,i对应于二维数组的索引,j对应于一维数组myArray [i]的索引.
现在,我可以从0到NUM_ROWS-1,因此它与访问语法对称,以初始化var myArray = new int [NUM_ROWS] [].这样,左侧括号组仍然对应于二维阵列的长度,右侧括号组仍然对应于一维阵列.
编辑:我看到有人发表评论a link to an article where Eric Lippert goes through a more elaborate example and justification.
内容总结
以上是互联网集市为您收集整理的为什么C#中的锯齿状数组以相反的方式定义?全部内容,希望文章能够帮你解决为什么C#中的锯齿状数组以相反的方式定义?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。