在我的课堂上,我必须编写一个程序来创建数据并将数据添加到 Java 中的 5d 数组中。相当容易。
但是,我想问的是:5d 数组是否用于现实生活中的编程?
使用如此复杂的结构会不会是一个糟糕的设计?程序员不应该专注于使其成为更简单的数据结构吗?
在我的课堂上,我必须编写一个程序来创建数据并将数据添加到 Java 中的 5d 数组中。相当容易。
但是,我想问的是:5d 数组是否用于现实生活中的编程?
使用如此复杂的结构会不会是一个糟糕的设计?程序员不应该专注于使其成为更简单的数据结构吗?
为什么不?
五维数组是从五个索引到一个值的映射。如果您有这个确切的要求,五维数组可能是实现此映射的最有效和最易读的方式。
过早地与自然发生的数据结构作斗争是没有意义的:如果当您在脑海中考虑数据时,您的数据有五个维度,那么在您的代码中使用 5D 数组对其进行建模是您的最佳策略。
选择不同数据结构的唯一原因是,如果您的 5D 数组恰好非常稀疏:就其性质而言,数组会急切地预先分配空间,从而导致在非常稀疏的结构上对内存的使用低于标准。此外,看似低于标准的空间使用可能比更好的性能所付出的代价更大:由于数组的简单性,数组代表了空间换速度权衡的一个极端点,因此“浪费”了几兆字节的空间以换取一些数万亿的 CPU 周期可能不是一件坏事。
是的,它被使用了。但是对于像网站这样简单的事情就没有那么多了。如果您必须进行复杂的物理学(广义相对论、计算化学、量子物理学)或数学应用。可能有足够的理由这样做。例如:张量应用
在 Matlab 中,人们一直使用 4d 矩阵。
当然也有使用高维数组仅用于索引目的的坏例子。
不良做法的一个例子:
$clothes["type"]["color"]["price"]["size"] = ...
@Renan 在评论中说,这完全是关于如何应用高维数组。
以我的经验,通常超过 3D 的任何东西都是不受欢迎的。开始将事物分解为类/结构而不是通过数字索引进行索引通常更有意义。我从未见过具有超过 4 个数字索引维度的数据集。前几天我正在研究一个流体动力学应用程序,它使用 afloat[][][][]
进行计算。
实际上,这取决于您的数据是否实际上是5D,或者您是否只是将可以更好地表示为嵌套类/结构的内容映射到数组上。
您是对的,如果可以选择更简单的结构,那么可能应该对其进行调查。然而,有时性能比简单性更重要(3D 图形?数据库引擎?无数其他示例)并且保持简单不是一种选择。
对于您在构建购物网站时遇到的大部分数据,可以将其制作为 2D - 毕竟它适合数据库表,因此其他人在此处发布的示例并不完全相关(衣服 [颜色] [类型].. .) - 这只是一个包含此类列的 2D 数据库表。
在需要更高维度数据的极少数情况下(我什至想不出一个!)我很确定你会认识到它,因为尽管有可能,但使用更低维度会带来固有的困难。