【问题标题】:Get total number of elements in jagged array获取交错数组中的元素总数
【发布时间】:2016-01-21 15:10:35
【问题描述】:

我有一个声明的字节数组:

Dim commands As Byte()() 

该数组后来填充了一堆字节值,在我当前的测试中,它产生一个矩形 3x3 数组(直线性是巧合,该数组可以包含任何长度的字节数组)。

commands = New Byte(3)(){}
'...
commands(i) = GetBytes(x)

稍后我还想获得锯齿状数组中总字节数的计数。我假设Array.Length 会按照描述的那样做

Array所有维度的元素总数

但是,实际上似乎只返回 4;数组第一个维度的计数,即GetLength(0) 或行数。 Array.Count 也返回相同的值(即 3)。

我是否正确理解 Array.Length 应该返回什么?如果我有,那为什么不返回 9?

P.S:我确实尝试过使用其他大小的数组,Length 肯定会返回 GetLength(0)

【问题讨论】:

  • 您引用的 MSDN 页面上的示例使用 1-2-3d 数组,而不是锯齿状数组。听起来您希望它扫描 contents 以计算这些元素?
  • @Plutonix 嗯,是的,有点! XD 那么基本上VB中的数组类型真的和内在类型一样笨吗?
  • 在 3D 数组中,其他维度实际上是数组对象(即命令)的一部分,而不是在锯齿状数组中。在那种情况下,它们只是内容

标签: arrays vb.net multidimensional-array count jagged-arrays


【解决方案1】:

我是否正确理解 Array.Length 应该返回什么?如果我有,那为什么不返回 9?

不完全是。顶级数组确实只有 3 个元素,这就是它的Length 属性所报告的。只是这些元素恰好是数组。

您需要循环(或编写 linq 查询等)以获取所有数组的总数,例如:

Dim total as Integer = 0
For Each subarray as Byte() In commands
    total += subarray.Length
Next

您在这里遇到的另一个问题是您有一个数组数组,而不是一个多维数组,它将被声明为:

Dim commands as Byte(,)

现在这是一个 单个 数组,其中Length 属性将返回所有个元素的计数。

【讨论】:

  • 我明白你的意思,但事实上,MSDN 描述中明确指出“所有维度”的意思恰恰相反,你不是说吗?
  • 刚刚看到@Plutonix 的第二条评论 - 解释得更多......-ish。似乎描述仍然非常具有误导性:\
  • VB 的交错数组元素是不是像多维数组那样顺序存储呢?
  • 你的意思是在实际内存中?这是一个实现细节,不同的 .NET 运行时可能会有所不同。
  • 不管怎样,我和commands.Sum(Function(c) c.Length)),Ta一起去了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2021-10-04
  • 2019-09-20
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多