通过LUA表迭代字符串匹配

时间:2014-05-08 09:02:11

标签: scripting lua add-on lua-table

我试图在敏感的情况下按字符串大小写匹配两个表。

示例

[6] = 
                {
                    ["itemName"] =     [Ore],
                    ["cleanName"] = [[Iron Ingot]],
                    ["secs"] = 25004,
                    ["gN"] = [[Luminary]],
                    ["buyer"] = [[@Naptha42]],
                    ["eventType"] = 15,
                    ["timestampz"] = 1399514069,
                    ["quantity"] = 100,
                    ["soldAmount"] = 500,
                    ["seller"] = [[@FataI]],
                },

我尝试将上表格式的项目移动到新表格中,或将其过滤到列表中。

g = e.cleanName 


for k, v in pairs(savedTable.ALL_ITEMS) do searchTable[k] = v
if g == savedTable.ALL_ITEMS.cleanName then
   table.insert(searchTable, savedTable.ALL_ITEMS)
end
end

上面的问题是g never = that savedTable。

该表有几千个条目,我试图通过搜索显示,我相信最好的方法是创建一个值为im的新表?

或者有没有办法使用string.match迭代表并仅显示(打印)这些值。

//更新 我有一个主动搜索,每次用户输入一个字母,它将搜索表格。 例。     Val1 ="你好"     Val2 ="再见"     Val3 ="嗨"

搜索时,用户输入" H"或" h"我希望结果为"你好,嗨"出现但不是"再见"

so with the if g == string.match(savedTable.ALL_ITEMS.cleanName)

不确定这是否正确。

//更新有效的解决方案(感谢ESOUI)

   local searchForItem = string.lower(g)
    for k, v in ipairs(myTable.ALL_SALES) do
        --        if string.lower(g) == string.lower(v.cleanName) then
        if string.lower(v.cleanName):find(searchForItem) then
            if v.cleanName ~= nil then
                table.insert(searchTable, v)
            end
        end
    end

1 个答案:

答案 0 :(得分:2)

如果ALL_ITEMS是包含表格的表格,那么它就不会直接拥有cleanName字段。

循环中的==是否针对v

此外,如果ALL_ITEMS是整数索引,您可能希望ipairs而不是pairs按顺序遍历表格。

为什么要将每个元素插入searchTable(通过searchTable[k] = v),然后再次尝试插入匹配的条目(通过table.insert)?< / p>

如果您需要,可以使用string.match将g与循环中的cleanName匹配,但如果您不进行比较,则无法解决问题你认为你在比较什么。