Lua5.x如何表示稀疏数组?
比如说,我有一个这样的数组:Lua5.x如何表示稀疏数组?,lua,Lua,比如说,我有一个这样的数组: T = {1,2,[1000] = 3, [-1] = -1} 我知道1和2将在连续数组部分,-1将在散列部分。 但我不知道3会在哪里。它将如何在Lua内部表示。 在2和3之间会有997个浪费的空间吗?为了提高效率,3会被委派去散列部分吗?是否会有两个链接的连续表,一个从索引1开始,另一个从索引1000开始?这取决于您使用的Lua版本。在Lua4中,表严格地实现为哈希表。在Lua5中,表是部分哈希表和部分数组,请参见第4节中介绍表和稀疏数组的内容 数组部分尝试存储
T = {1,2,[1000] = 3, [-1] = -1}
我知道1和2将在连续数组部分,-1将在散列部分。
但我不知道3会在哪里。它将如何在Lua内部表示。
在2和3之间会有997个浪费的空间吗?为了提高效率,3会被委派去散列部分吗?是否会有两个链接的连续表,一个从索引1开始,另一个从索引1000开始?这取决于您使用的Lua版本。在Lua4中,表严格地实现为哈希表。在Lua5中,表是部分哈希表和部分数组,请参见第4节中介绍表和稀疏数组的内容 数组部分尝试存储与整数键对应的值 从1到某个极限
n
。与非整数键或
到范围外的整数键存储在散列部分。。。这个
数组部分的计算大小为最大n,这样至少
1和n
之间的一半块正在使用中。。。至少有
在n/2+1
和n
之间使用一个插槽
在您的示例中,1000可能在初始n之外,并且不会导致数组部分增长,因为它太稀疏了。您不必担心这些细节:只需相信Lua表是有效实现的,并且在给定项的键的情况下,对其进行预期的恒定时间访问。数组部分只是一个实现细节,通过不存储一些键来减少内存使用
正如rpattiso所解释的,在您的示例中没有内存浪费。
3
也将是哈希。{[1]=1,[3]=3}3也将是哈希吗?规则是什么?自从那篇论文发表以来,细节可能已经改变了。不管怎样,细节都不重要。