2

我正在用 Ruby 设计一个游戏以学习该语言,我的游戏需要处于从数组中删除项目并将它们添加到另一个数组中的恒定循环,而不是从另一个数组中删除并读取第一个数组。我想知道当我调用 Array.delete() 时内部会发生什么。我宁愿为我的游戏使用链表,因为从链表中删除和添加到链表比在数组上更有效。然而,Array 是迄今为止我在 Ruby 中遇到的唯一数据结构。它真的是唯一可用的吗?

编辑:这是一个基本的射击游戏,敌舰可以向玩家发射子弹。为了避免每次敌人向玩家开火时都必须分配新子弹,我在游戏开始前分配了很多子弹。当敌人射击时,他从可用子弹列表中挑选一颗子弹并将其放入“活动”子弹列表中。负责在屏幕上绘制项目符号的类只在活动项目符号列表中绘制那些项目符号。当子弹离开屏幕时,它会返回可用子弹列表。这就是所有洗牌的来源......

4

2 回答 2

4

在 Ruby 中实现链表很容易,但有一次我真正做到了,性能与使用 Array 完全相同。Ruby 中更好的算法完全被内部 C 代码的速度所平衡。

现在,我并没有尝试删除 Array 中间的东西。

对于您的情况,我认为可以肯定地说如果数组很短,那么算法就无关紧要,使用内置的 Array 类就可以了。如果数组很长,那么毫无疑问可以构造某种映射,从而从数组中间删除东西不需要重新打包数组及其二次时间复杂度。

确实,您应该首先以简单直接的方式实现您的游戏。你不应该在一开始就加入复杂性,甚至不知道它买了什么,如果有的话。谁知道呢,你甚至可能会发现游戏的其他部分使用了更多时间。

如果你发现你确实陷入了数组删除的困境,下一步就是添加一个映射,或者,是的,一个用 Ruby 实现的链表或树。如果这还不够快,那么使用封装的 Ruby 解决方案和一组测试,您将处于编写 C 扩展的有利位置,并且您几乎会确切地知道它的好处。

于 2013-03-16T02:20:03.180 回答
-2

使用Hash. 它比 更有效Array

于 2013-03-16T02:15:53.907 回答