Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为数组和字典编制索引有什么区别?_Arrays_Dictionary_Lua - Fatal编程技术网

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”是否在表中的选项与您所写的相同。字典需要更多的内存,根据您拥有的值的多少,创建字典可能需要一段时间,但访问键的时间应该是恒定的。然而,在表中循环将花费越来越长的时间,您拥有的项目越多,因此这是您必须做出决定的权衡

但是,有更快的方法搜索数组(例如,如果已排序:)

另请参见