如何获取多维数组的宽高?

Posted

技术标签:

【中文标题】如何获取多维数组的宽高?【英文标题】:How do you get the width and height of a multi-dimensional array? 【发布时间】:2011-05-14 16:44:24 【问题描述】:

我定义了一个数组:

int [,] ary;
// ...
int nArea = ary.Length; // x*y or total area

这一切都很好,但我需要知道这个数组在xy 维度中的宽度。也就是说,ary.Length 可能会返回 12 - 但这是否意味着数组是 4 高和 3 宽,还是 6 高和 2 宽?

我如何检索这些信息?

【问题讨论】:

相关:***.com/q/677909/60761 How do I find the size of a 2D array?的可能重复 【参考方案1】:

您将Array.GetLength 与您希望检索的维度的索引一起使用。

【讨论】:

.Rank 表示维数。如果是 2,.GetLength(0) 表示行数,.GetLength(1) 表示列数。【参考方案2】:

使用 GetLength(),而不是 Length。

int rowsOrHeight = ary.GetLength(0);
int colsOrWidth = ary.GetLength(1);

【讨论】:

【参考方案3】:
// Two-dimensional GetLength example.
int[,] two = new int[5, 10];
Console.WriteLine(two.GetLength(0)); // Writes 5
Console.WriteLine(two.GetLength(1)); // Writes 10

【讨论】:

【参考方案4】:

其他一些帖子对哪个维度是哪个维度感到困惑。这是一个 NUNIT 测试,展示了 2D 数组如何在 C# 中工作

[Test]
public void ArraysAreRowMajor()

    var myArray = new int[2,3]
        
            1, 2, 3,
            4, 5, 6
        ;

    int rows = myArray.GetLength(0);
    int columns = myArray.GetLength(1);
    Assert.AreEqual(2,rows);
    Assert.AreEqual(3,columns);
    Assert.AreEqual(1,myArray[0,0]);
    Assert.AreEqual(2,myArray[0,1]);
    Assert.AreEqual(3,myArray[0,2]);
    Assert.AreEqual(4,myArray[1,0]);
    Assert.AreEqual(5,myArray[1,1]);
    Assert.AreEqual(6,myArray[1,2]);

【讨论】:

【参考方案5】:
ary.GetLength(0) 
ary.GetLength(1)

二维数组

【讨论】:

【参考方案6】:

您还可以考虑使用以下方法获取每个指定维度中最后一个元素的索引;

int x = ary.GetUpperBound(0);
int y = ary.GetUpperBound(1);

请记住,这会将 index 的值从 0 开始。

【讨论】:

以上是关于如何获取多维数组的宽高?的主要内容,如果未能解决你的问题,请参考以下文章

如何从多维数组中获取维度(切片)

如何拆分 JavaScript 多维数组并获取最后一个数组?

如何使用codeigniter从mysql中获取多个多维数组中的数据?

多维数组:如何获取特定键的所有值? [复制]

如何在C#中获取多维数组的行/列的长度?

在多维数组中获取承诺的结果