1

我正在尝试将棋子的攻击动作存储在 64 平方的位板上。基本上我使用任何哈希表数组来做到这一点:

(defvar attacks (make-array '(64) :initial-element (make-hash-table))

但是,我注意到当我填充数组中的每个哈希表(每个大约 1000 个元素)时,它与另一个哈希表相交。那是一个哈希表具有来自另一个哈希表的值,即使我没有把它放在那里。

我在想象事情吗?这是一个错误吗?

4

2 回答 2

4

您创建一个哈希表(使用 make-hash-table),然后将其设置在数组的所有元素中。做你想做的事,你想做以下之一:

  • 创建一个空数组,循环遍历并将每个索引设置为一个新的哈希表
  • 创建一个包含 64 个新哈希表的列表并使用 :INITIAL-CONTENTS 在创建时填充数组

这样,哈希表将是分开的,而不是存储 64 次的同一个哈希表。

于 2012-10-04T08:59:40.283 回答
0

您应该使用 :INITFORM 而不是 :initial-element 来获取不同的哈希表

(我的答案是错误的,请参阅 Vatine 的)

于 2012-10-04T08:14:20.580 回答