【问题标题】:Why is my array being flipped?为什么我的数组被翻转?
【发布时间】:2013-09-07 01:50:24
【问题描述】:
            public const T = true;
            public static bool[,] MassMediumHorizontal = new bool[,]
            { 
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T},
            {T,T,T,T,T,T}
            };

如大家所见,这个数组的宽度为 6,高度为 12。

当我编译它时,宽度和高度是翻转的。

如果我在调试时放置断点(Visual Studio 功能),然后将鼠标悬停在变量名称上,它会告诉我数组的大小,并显示为 12x6(宽 x 高)。


当然,如果我想得到相反的结果,那么我只需将原始数组制作为 12x6 并在编译后以 6x12 结束。

但为什么会发生这种情况呢? (编译后我从不旋转它)

【问题讨论】:

  • 嗯,我想你读错了。这是height * widthrow * column,而不是width * heightcolumn * row
  • 如果您认为这令人困惑,那么您还没有看到任何东西。这会让你大吃一惊:ericlippert.com/2009/08/17/arrays-of-arrays

标签: c# arrays rotation flip


【解决方案1】:

将数组视为宽度和高度会使事情变得混乱。测量从最外层开始。

你的外部维度是 12,内部维度是 6。因此是 12 x 6。这就是它的工作方式。

【讨论】:

  • 哦,我明白了,感谢您的澄清。高度和宽度翻转似乎很奇怪。我想我会相应地对我的数组进行所有更改。谢谢
  • @Davud:我不清楚你为什么认为任何事情都被翻转了。在 C# 中,无论二维数组是矩形的还是参差不齐的,左索引选择行,右索引选择列。您认为左索引是列而右索引是行的想法是完全错误的。我很想知道你的错误信念来自哪里。为什么你会错误地认为左索引选择了列?
  • @EricLippert 可能基于二维数组的视觉布局,当您按照他的方式对其进行初始化时。我知道我自己多次犯过同样的错误(这意味着我现在总是记得它)。
  • @MagnusGrindalBakken:但这是一个解释不了任何东西的解释。我看着那个布局,我认为“12 行,6 列”。那么我为什么要得出左手索引选择列的结论呢? OP 的困惑是他们认为左索引是列,但为什么这是“更自然”的思考方式?
  • @EricLippert 对我来说,它的基础不是更自然的理性想法,而是希望页面上的视觉布局与我迭代时发生的事情相匹配。它以最明显的方式。 (也就是说,for i in 0..n: for j in 0..n: print(array[i][j]),在每个内部循环之后都有换行符。)我记得在意识到棋盘偏离 90 度之前,我已经深入到国际象棋 GUI 中。我同意它没有解释任何东西,并且还会指出,当我意识到它时,我立即明白了为什么它是错误的并修复它,而不是跑到 SO。
【解决方案2】:

数组实际上没有“宽度”和“高度”的概念,尺寸是任意的。

恰好第一个维度的数组长度是12,第二维数组的长度是6,所以它是一个12x6的数组。您和我通常将第一个维度视为“宽度”,将第二个维度视为“高度”这一事实与编译器无关。

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多