【问题标题】:Getting the size of each dimension of multidimensional array获取多维数组每一维的大小
【发布时间】:2015-12-10 20:37:21
【问题描述】:

假设我想编写一个函数来使用嵌套循环“解包”(存储或记录)一个多维数组。这个概念很简单,只要我能够确定,在 3D 数组的情况下,数组的长度、宽度和高度。

在 Objective-C 中,是否有某种方法可以在将未知大小的多维数组作为方法参数传递之后,确定这些维度大小是多少?然后,如前所述,使用嵌套的 for 循环将是一件简单的事情。

【问题讨论】:

  • NSArray 还是 C 数组,还是别的什么?
  • @JoshCaswell 让我们使用 NSArray。如果 C 中存在实现此目的的功能,我可以使用 Objc 或标准 C 数组。我们可以假设数组是不可变的。
  • 好吧,NSArray 会告诉你它的count,而内部的NSArrays 也可以这样做。我不确定你还需要什么。您是否遇到过更深层次的问题?

标签: objective-c arrays multidimensional-array nested-loops


【解决方案1】:

NSArray 本质上是一维的,如果你愿意,它是一个向量,并且正如 John 所指出的,它具有 count 属性。要模拟多维数组,您当然可以有一个 NSArray *rows,其中包含许多 NSAarray *columnElement 等等。这不是一个真正的多维度数组,更像是一个树型结构,但你可以称之为数组。但我认为这不是你要问的。

我认为您正在考虑指针引用遍历的 C 样式内存缓冲区。这本质上也是一维结构,因为内存寻址是一维的。在许多情况下,这样的缓冲区可以被视为 2 维或更多维,例如您说每 50 个字节是一行,因此位置 0 是第 1 行第 1 行,位置 49 是第 1 行第 50 行,位置 50 是第 2 行列1等

在这种情况下,作为设计者,您已经将缓冲区的这种解释定义为二维数组,因此无法单独从缓冲区派生结构。您必须将缓冲区的排列作为元数据存储在其他变量中,或者在缓冲区中强加某种形式的分隔符,例如新行的换行符。和逗号用于新列元素或类似元素(但在我看来它不再是一个数组,它是一种文件格式,这里是一个 csv 文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2012-05-01
    • 2017-12-25
    • 2011-05-05
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多