Arrays 为数组和字典编制索引有什么区别?
根据我的理解,数组是一个简单的值表,比如Arrays 为数组和字典编制索引有什么区别?,arrays,dictionary,lua,Arrays,Dictionary,Lua,根据我的理解,数组是一个简单的值表,比如localt={“a”,“b”,“c”},字典是一个对象表,比如localt={a=1,b=2,c=3},当然,如果我在其中一种或两种情况下都错了,请告诉我 无论如何,我的问题在于我们如何索引这两种情况下的条目。例如,假设我有以下代码: local t = {"TestEntry"} print(t["TestEntry"]) 当然,这会打印出nil。但是,当我们以同样的方式使用词典时: local t = {Te
localt={“a”,“b”,“c”}
,字典是一个对象表,比如localt={a=1,b=2,c=3}
,当然,如果我在其中一种或两种情况下都错了,请告诉我
无论如何,我的问题在于我们如何索引这两种情况下的条目。例如,假设我有以下代码:
local t = {"TestEntry"}
print(t["TestEntry"])
当然,这会打印出nil
。但是,当我们以同样的方式使用词典时:
local t = {TestEntry = 1}
print(t["TestEntry"])
这自然会打印1
。我的问题是,为什么它对字典是这样工作的,而对数组不是这样
最后,我想谈谈导致我提出这个问题的问题。比方说,在我想要运行一段代码之前,我需要查看表中是否有特定的值。如果我可以用table[“giventry”]
检查它是否在表中,这会很方便,但是,正如我们所看到的,只有当表中的条目实际上是一个对象时,这才有效。在我的具体例子中,我只是使用一个数组,所以它不是一个对象
因此,我不得不使用for
循环来检查表:
local t = {"TestEntry1","TestEntry2"}
for i,v in pairs(t) do
if v == "TestEntry1" then
--do code
end
end
这样做之后,似乎更容易创建一本愚蠢的词典,如:
local t = {TestEntry1 = "TestEntry1"}
因为这样,我就可以简单地运行t[“TestEntry1”]
,而不必担心有一个空表(因为那样的话,for
循环就不会运行了)。为这样的目的创建词典是否会产生影响?一般来说,它的效率较低吗
感谢您的意见,
谢谢。在Lua中,两个数组和字典都是相同的类型(表)
localt={“TestEntry”}
本质上是localt={[1]=“TestEntry”}
的缩写(Lua需要括号表示数字,您可以使用t[1]
访问它)
因此,检查“TestEntry1”是否在表中的选项与您所写的相同。字典需要更多的内存,根据您拥有的值的多少,创建字典可能需要一段时间,但访问键的时间应该是恒定的。然而,在表中循环将花费越来越长的时间,您拥有的项目越多,因此这是您必须做出决定的权衡
但是,有更快的方法搜索数组(例如,如果已排序:)另请参见