1

目前,我有以下代码:

runtable={}
for _,v in pairs(akeys) do
  if string.match(string.upper(v),string.upper(area)) then
    table.insert(runtable,area)
    break
  end
end

if #runtable = 0 then
  for i,_ in pairs(akeys) do
    if string.match(string.upper(i),string.upper(area)) then
    table.insert(runttable,area)
    end
  end
end

这个脚本的目的是先遍历所有的值,看看 area 变量是否与值匹配。如果是这样,它将是一次性的,因此它将停止循环并继续执行脚本的其余部分(超出if #runtable = 0. 如果它未能在值中找到任何内容,则它会再次遍历列表,但这次将索引与区域进行比较,并且每次找到匹配项(部分或完整)时,它会将其添加到运行表中。

有没有更有效的方法来做到这一点?或者这是运行它的最佳方式,不管它看起来多么混乱?

4

1 回答 1

2
local rt1, rt2 = {}, {}
for i,v in pairs(akeys) do
  if string.match(string.upper(v),string.upper(area)) then
    table.insert(rt1,area)
    break
  end
  if string.match(string.upper(i),string.upper(area)) then
    table.insert(rt2,area)
  end
end

local runtable = #rt1 > 0 and rt1 or rt2

就丑陋而言并没有很大的节省,但它节省了第二个循环。可悲的是,我知道没有一种魔法可以使这个更漂亮,但这是拥有像 Lua 这样紧凑的语言的权衡之一。

于 2012-08-04T21:54:07.497 回答