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

我正在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 = "单词 "..text.Text.." 在表中被发现了。"
 else
     label.Text = "单词 "..text.Text.." 在表中未被发现。"
 end
 end)

但是它给出了一个错误**需要字符串,得到了表格。来自第7**行,它是指_referring to the line if string.match...._

有没有办法获取表中的所有文字?

该怎么做?

点赞
用户4984564
用户4984564

哦,这个问题有很多要说的。

错误信息

是的。

不,认真的,答案是是的。a 是一个表值;你可以在第三行代码中清楚地看到这一点。string.match 需要一个字符串作为它的第二个参数,所以它显然会崩溃。

简单解决方案

使用 for 循环并逐个检查 a 中的每个字符串。

found = false
for index, entry in ipairs(a) do
  if entry == text.Text then
    found = true
  end
end
if found then
... -- 剩下的代码

更好的解决方案

在 Lua 中,如果我们想知道单个元素是否在集合中,我们通常利用表作为哈希表实现的事实,这意味着它们在查找键时非常快。

为了使其有效工作,我们需要首先改变表的外观:

a = {["test1"] = true, ["test2"] = true, ["test3"] = true}

然后我们可以通过使用字符串索引 a 来查找它是否包含在集合中。

if a[text.Text] then ...

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

2018-04-25 12:32:53