是存储冗余信息(可以从现有数据生成)还是在每次需要访问时转换现有数据更可取?
我在下面尽可能地简化了我的具体问题,希望提供的答案可以作为未来的参考材料。
例子:
假设我们开发了一个程序,将数据放入网格上的 Squares(如井字游戏之类的超级描述性游戏)并分配各种细节,并为每个细节分配一个唯一的标识号:
在整个程序中,我们经常根据正方形的 X 和/或 Y 坐标执行逻辑(连续检查 3 个),而其他时候我们只需要 ID(可能访问 "SquareName[ID]" 处的字符串)——我们不确定这两者中哪一个更频繁地被访问,但这是一场相当激烈的竞争。
到目前为止,我们只是将 ID 存储在 square 类中,并在只需要 X 或 Y 时使用一些简单的公式对其进行转换。假设我们特别想获得一个正方形的坐标:
int CurrentX = (this.Square.ID - 1) % 3) + 1; // X coordinate, 1 through 3
int CurrentY = (this.Square.ID + 1) / 3; // Y, 1 through 3
由于正方形在设置后不会四处移动或更改 ID,部分我认为将所有 3 个值存储在 Square 类中会更简单,但我的另一部分对冗余感到畏缩,因为访问 X 和 Y 已经很容易了足以从现有 ID 计算。
(注意,这个程序本身不是非常占用内存或资源,网格的大小也不会变得更大,所以主要取决于哪个选项是更好的实践或经验法则。)
你会怎么办?