在Lua中,是否有一种更简单(更有效)的方法先迭代表中的值,然后再迭代索引?

目前,我有以下代码:

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)。如果在值中找不到任何内容,则它会再次遍历列表,但这次是将索引与 area 进行比较,并且每次找到匹配(部分或完整)时,它将添加到 runtable 中。

有没有更高效的方法来做到这一点?还是说这是运行此操作的最佳可能方式,无论看起来多混乱?

点赞
用户1516484
用户1516484
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-04 21:54:07