2011-03-31 66 views
5

我一直在咀嚼这一段时间,我想我会打开一个问题,并试图获得一些关于它的想法。也许有些东西会引发一个灯泡。需要非常大的数据结构。寻找想法

我需要建立一个六角形网格,并且这个六角形网格将是最小10 x 10和最大500x500 - 并且可能更大。这显然是高端电网,自然必须分解。

这是问题的主要部分。

  • 500x500网格的六边形。约。
  • 他们不经常改变,但他们可以改变。
  • 将其分解为50x50或100x100的部分是非常可行的,但有可能有人可能从地图的一端跑到另一端,所以我需要能够在某个时刻处理整个事情,即使它是分段的。
  • 这显然会造成大的内存消耗。

我可以将数据(共享变量)存储为简单的byteArray或甚至在plainText中。每个十六进制的信息非常简单,只是有多少。我不“保存”数据。 (将是一个功能)

每个六边形的基本结构是:

  • 十六进制颜色(与轮廓明显) (或位图图片)阻击器 任何人!
  • 带有数字的TextField。 (最大2 数字)

这几乎是所有需要的信息。

如果没有十六进制变化的可能性,这将是相当微不足道的。

所以我很好奇,如果有人对此有任何想法。 (任何绝对真理都不会是坏的;)

编辑:哦,关于hexes的信息通过tcp流。这不是一个问题,就像我说的那样,每个十六进制的数据是简单的,我的解析器闪电般快,所以这不是问题。

更新:必须创建和维护250,000个对象(hexes)的可能性是我主要问这个问题。这就是我寻找想法的原因。 (闪存中的250k对象很好)

+0

从描述中不太清楚问题是什么。一个相当小的数据结构的500x500阵列在内存中不会很大。如果您需要存储的只是RGB颜色和int,则只能是几兆字节。究竟是什么问题? – 2011-03-31 02:06:42

+0

250,000个可能的对象是我问为什么。只是为了地图。 – Feltope 2011-03-31 02:07:53

+2

如果对象很大,250,000个对象只是一个问题。但是你指定你的数据结构有一个颜色(4字节)和一个int(4字节)。这是少量的数据(〜2MB)。你需要同时显示多少这些六角形的东西?据推测,并非所有250,000在同一时间... – 2011-03-31 02:41:35

回答

4

每个六边形的基本结构是:

* hex color (with outline obviously) (or a bitmap picture) blitting anyone! 
* TextField with a number in it. (max 2 digits) 

我想你并不需要存储所有250K文本字段和位图,因为他们是应该只存在在屏幕上。将这些数据打包成少量字节 - 最多2位数字是7位,从调色板添加颜色标识(如果需要truecolor,则添加24位颜色)和位图标识。如果您创建相同大小的结构,则可以将它们写入ByteArray。这将使您摆脱250K对象引用并防止可能的内存碎片。
然后,您只需要为这些字节创建包/解包函数到一些可用的对象中(不要忘记对象池),并使用aththods从ByteArray正确地获取它们。正如其他人指出的,如果将单元格数据打包到int对中,250K单元并不多。

2

也许你可以将此作为重复数据删除的练习?例如,有不超过100个不同的文本值可以与你的格子相关联。假设你只使用少量不同的十六进制颜色(比如说小于20),那么相对较小的一组十六进制实例可以代表每个可能的十六进制配置。所以,你可以有一个效用函数一样(不是有效的ActionScript语法,不好意思):

Hex getHex(int color, String label)

...进行检查,看是否有六角已经给定配置存在,只创建一个新的Hex实例如果还不存在的话。

因此,您的数组中仍然有250,000个引用(或者用于跟踪您的hexes的任何结构),但实际对象实例的数量要少得多。似乎应该可以管理,即使在Flash中也是如此。

当然,如果创建完成后可变的话,你将会非常小心。