0检查TextBox.Text是否包含表中的字符串。但它不起作用? LUA

时间:2018-04-25 10:33:42

标签: lua roblox

我在TextButton脚本中创建一个脚本,它将检查TextBox是否包含表格中的任何单词或字符串。

text = script.Parent.Parent:WaitForChild('TextBox')
label = script.Parent.Parent:WaitForChild('TextLabel')

a = {'test1','test2','test3'}

script.Parent.MouseButton1Click:connect(function()
     if  string.match(text.Text, a) then
     label.Text = "The word "..text.Text.." was found in the table."
 else
     label.Text = "The word "..text.Text.." was not found in the table."
 end
 end)

但是它会在 7 行中提供错误 字符串,得到表格。 ,如果是字符串则引用行。匹配....

有没有办法让表格中的所有文字都出现?

做正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

哦,小伙子,对此有很多话要说。

错误消息

不,说真的,答案是肯定的。错误消息是完全正确的。 a是一个表值;你可以清楚地看到第三行代码。 <{1}}需要一个字符串作为其第二个参数,因此它显然会崩溃。

简单解决方案

使用string.match循环并分别检查for中的每个字符串。

a

更好 *解决方案

在Lua中,如果我们想知道单个元素是否在一个集合中,我们通常会利用表格实现为散列图这一事实,这意味着它们在查找键时速度非常快。

为了实现这一目标,首先需要改变表的外观:

found = false
for index, entry in ipairs(a) do
  if entry == text.Text then
    found = true
  end
end
if found then
... -- the rest of your code

然后我们可以用一个字符串索引a = {["test1"] = true, ["test2"] = true, ["test3"] = true} 来查明它是否包含在集合中。

a

*在实践中,只要您的表中只有几个元素,这与第一个解决方案一样好。只有当你有几百个条目需要尽可能快地运行时,它才会变得相关。