检查单词是否在 lua 中的数组中
Checking if a word is in a array in lua
我试图在数组中找到一个包含“orange”的单词。它有效,但是当我添加 else 语句以显示消息“找不到匹配项”时,我得到了这个结果。
matches not found
x-orange-test
orange
new_orange
matches not found
我做错了什么?如果数组中存在“橙色”,为什么我会收到“找不到匹配项”的消息?
逻辑是这样的:如果数组中至少有一个元素带有单词“orange”,则只打印这些元素。如果数组不包含带有单词“orange”的元素,则打印 一行“找不到匹配项” 对不起,我是 LUA 的新手。我的代码。
local items = { 'apple', 'x-orange-test', 'orange', 'new_orange', 'banana' }
for key,value in pairs(items) do
if string.match(value, 'orange') then
print (value)
else
print ('matches not found')
end
end
相当于 Python 代码,对找到的元素的总和进行了轻微修正。它按照我需要的方式工作。但我需要弄清楚如何在 LUA
中做同样的事情
#!/usr/bin/env python3
items = ['apple', 'x-orange-test', 'orange', 'new_orange', 'banana']
if any("orange" in s for s in items):
sum_orange = sum("orange" in s for s in items)
print (sum_orange)
else:
print('matches not found')
提前致谢。
您的 lua 代码打印 table 中每个元素的结果,因此您将收到两倍的“未找到”消息,因为确实有两个元素没有橙色。
您的 Python 代码使用了完全不同的逻辑,无法与 lua 代码进行比较。要修复 lua 代码,您可以使用如下代码:
found = false
for key,value in pairs(items) do
if string.match(value, 'orange') then
print (value)
found = true
end
end
if not found then
print ('matches not found')
end
对于第一个代码,您将遍历集合中的每个项目并检查项目中是否包含“orange”。因此,当您到达不包含单词“orange”的 am item 时,else 条件为真,因此打印未找到的匹配项。我建议您从 for 循环中删除 print('matches not found') 。而是创建一个布尔值来检查是否在集合中的任何项目中找到“橙色”。在 for 循环之外,你可以检查布尔值是否为假,然后打印 'match not found.' 见下面的代码:
local items = { 'apple', 'x-orange-test', 'orange', 'new_orange', 'banana' }
local matchFound = false
for key,value in pairs(items) do
if string.match(value, 'orange') then
print (value)
matchFound = true
end
end
if not matchFound then
print('matches not found')
你可以像这样匹配迭代器。
-- table method extend
---@param t string[]
---@param value string
function table.find(t, value)
if type(t) ~= "table" or t[1] == nil then
error("is not a array")
return
end
for k, v in ipairs(t) do
if v == value then
return true, t[k]
end
end
return false, nil
end
local items = {
"apple",
"x-orange-test",
"orange",
"new_orange",
"banana"
}
print(table.find(items, "orange"))
--> true orange
print(table.find(items, "orange-odd"))
--> false nil
我试图在数组中找到一个包含“orange”的单词。它有效,但是当我添加 else 语句以显示消息“找不到匹配项”时,我得到了这个结果。
matches not found
x-orange-test
orange
new_orange
matches not found
我做错了什么?如果数组中存在“橙色”,为什么我会收到“找不到匹配项”的消息?
逻辑是这样的:如果数组中至少有一个元素带有单词“orange”,则只打印这些元素。如果数组不包含带有单词“orange”的元素,则打印 一行“找不到匹配项” 对不起,我是 LUA 的新手。我的代码。
local items = { 'apple', 'x-orange-test', 'orange', 'new_orange', 'banana' }
for key,value in pairs(items) do
if string.match(value, 'orange') then
print (value)
else
print ('matches not found')
end
end
相当于 Python 代码,对找到的元素的总和进行了轻微修正。它按照我需要的方式工作。但我需要弄清楚如何在 LUA
中做同样的事情#!/usr/bin/env python3
items = ['apple', 'x-orange-test', 'orange', 'new_orange', 'banana']
if any("orange" in s for s in items):
sum_orange = sum("orange" in s for s in items)
print (sum_orange)
else:
print('matches not found')
提前致谢。
您的 lua 代码打印 table 中每个元素的结果,因此您将收到两倍的“未找到”消息,因为确实有两个元素没有橙色。
您的 Python 代码使用了完全不同的逻辑,无法与 lua 代码进行比较。要修复 lua 代码,您可以使用如下代码:
found = false
for key,value in pairs(items) do
if string.match(value, 'orange') then
print (value)
found = true
end
end
if not found then
print ('matches not found')
end
对于第一个代码,您将遍历集合中的每个项目并检查项目中是否包含“orange”。因此,当您到达不包含单词“orange”的 am item 时,else 条件为真,因此打印未找到的匹配项。我建议您从 for 循环中删除 print('matches not found') 。而是创建一个布尔值来检查是否在集合中的任何项目中找到“橙色”。在 for 循环之外,你可以检查布尔值是否为假,然后打印 'match not found.' 见下面的代码:
local items = { 'apple', 'x-orange-test', 'orange', 'new_orange', 'banana' }
local matchFound = false
for key,value in pairs(items) do
if string.match(value, 'orange') then
print (value)
matchFound = true
end
end
if not matchFound then
print('matches not found')
你可以像这样匹配迭代器。
-- table method extend
---@param t string[]
---@param value string
function table.find(t, value)
if type(t) ~= "table" or t[1] == nil then
error("is not a array")
return
end
for k, v in ipairs(t) do
if v == value then
return true, t[k]
end
end
return false, nil
end
local items = {
"apple",
"x-orange-test",
"orange",
"new_orange",
"banana"
}
print(table.find(items, "orange"))
--> true orange
print(table.find(items, "orange-odd"))
--> false nil