【问题标题】:Fake a multidimensional array with a flat one?用平面数组伪造多维数组?
【发布时间】:2011-03-18 14:51:04
【问题描述】:

有没有一种简单的方法可以使用平面阵列来伪造未知大小的多维阵列?我有一个应用程序,其中 90% 的数组使用在不使用递归的情况下会更容易/更快,并且需要为数组增加一些深度的单个要求。我能想到的唯一方法是保留一个开始索引和结束索引的运行列表,其中一维数组如下所示:

[0] = 1
[1] = 2
[2] = 3
[3] = 4
[4] = 5

...开始/结束列表如下所示:

Start      End
-----      ---
[0] = 1    [0] = 2
[1] = 3    [1] = 4

这将代表一个看起来像这样的多维数组:

[0] = 1
[1] = [0] = 2
      [1] = 3
[2] = [0] = 4
      [1] = 5

这将适用于超过 2 维,但那时我无法弄清楚如何确定在给定原始一维数组和开始/结束列表中的索引时我所处的深度。我也很难弄清楚要使用哪些搜索词来查找此类内容。任何一般性指导/想法将不胜感激。谢谢。

编辑 - 给出一些上下文,这是为了支持命令模式实现中的嵌套事务。一维数组包含命令,人工深度仅用于为每个事务命名。由于事务将被谨慎使用,很明显,快速遍历一个小整数列表比递归遍历一个多维命令数组并检查每个索引是否有单个命令或一个命令更快。内的命令数组。

【问题讨论】:

  • 在我看来,您从避免递归中获得的任何收益(以及为什么需要向下递归?)都会被维持这些人为“深度”级别的痛苦所吞噬。
  • 你认为在三个独立的数组之间进行处理会比递归和真正的多维数组表现更好吗?我希望你在走这条路之前做一些重要的基准测试。
  • @Marc B & @meagar:请查看提供更多上下文的编辑。
  • 我还应该注意,我刚刚意识到我应该将其称为假的“数组数组”而不是多维数组。

标签: arrays language-agnostic multidimensional-array


【解决方案1】:

一般来说,存储结束位置似乎是多余的。一个数组在下一个数组开始的地方结束,不是吗?

其次,问题是对于每个额外的维度,您都需要额外的查找列表,除非它们具有固定大小。我不知道这是否归结为比您的原始解决方案更有效。

【讨论】:

  • 对于 2D 数组,当前数组在下一个数组开始处结束,但在 3D 数组中可能有两个数组。因此,顶层嵌套不会在第一个嵌套结束时结束,它会在第二个嵌套结束时结束。
  • @Ocelot20:你说得对,这只适用于最后一个维度。
猜你喜欢
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
相关资源
最近更新 更多