是否有更简单(更有效)的方法来首先遍历表值,然后在Lua中进行索引?

时间:2012-08-04 20:40:29

标签: lua iteration lua-table

目前,我有以下代码:

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

此脚本的目的是首先遍历所有值,并查看区域变量是否与值匹配。如果确实如此,它将是一次性的事情,所以它将停止循环并继续使用脚本的其余部分(超出if #runtable = 0)。如果它未能在值中找到任何内容,则它会再次遍历列表,但这次将索引与区域进行比较,并且每次找到匹配(部分或全部)时,它都会将其添加到runtable。 / p>

有更有效的方法吗?或者这是运行它的最佳方式,无论它看起来多么混乱?

1 个答案:

答案 0 :(得分: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一样紧凑的语言的权衡之一。