如何在lua中将数组转换为哈希(防止数组变为哈希)?

时间:2014-08-04 05:32:10

标签: arrays hash lua lua-table

如果我用Lua写作

local var = {1,2,3,4,5,6}

变量 var 是数组。

如果我想将它保存为数组(不是哈希),我必须使用table.insert,table.remove等。

此代码将其转换为哈希:

var["key"] = 4

问题: 此代码是否将数组变量转换为哈希?

local var = {1,2,3,4,5}
var[4] = "string"
var[6] = "string"
var[1] = "string"

2 个答案:

答案 0 :(得分:2)

正如其他人已经指出的那样,Lua只有桌子。在内部,您放在表中的值可以存储在其数组或散列部分中,但它是用户无需担心的实现细节。

在您的特定情况下,键将仅存储在数组部分中(即使在分配后),因为您没有创建任何新键。根据{{​​3}}(“关于表格”部分)中的详细描述,初始赋值将在数组部分中分配6个插槽,然后您只需重新分配这些插槽。如果添加var[7] = "string",则此值将进入哈希部分,这将触发重新哈希,因为此时哈希部分的大小为0。 Lua将计算需要多少个插槽来容纳阵列部分中的所有值(现在为7),“选择数组部分的大小为2的最大功率,以便填充阵列部分的一半以上的元素”。数组部分现在有8个插槽,散列部分的大小仍为0,因为没有元素可以去那里。

  

问题:此代码是否将数组变量转换为哈希?

所以这个问题的答案是“不”(如果通过“变成哈希”你的意思是表得到一个非零的哈希部分)。如果你执行var[8] = "string"(没有分配var[7]),哈希部分将获得非零大小,但如果您稍后执行var[7] = "string",这将触发另一个重新哈希,因为此元素赢了不适合散列部分,所有这些元素将再次分配给数组部分。

Lua正在努力为表中的元素保留最合适的结构,但结构本身的更改只在重新散列过程中完成。

答案 1 :(得分:1)

你试图区分Lua中不存在的“数组”和“哈希”。他们都是桌子。他们中的一些人只拥有不是正整数的键。