遍历 LUA 表以查找字符串匹配。

我正在尝试通过字符串大小写敏感来匹配两个表格。

例子

[6] =
                {
                    ["itemName"] =     [矿石],
                    ["cleanName"] = [[铁锭]],
                    ["secs"] = 25004,
                    ["gN"] = [[流明]],
                    ["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从来不等于那个已经被保存的表格。

这个表格有几千个条目,我想通过搜索来展示,我认为最好的方法是创建一个新的表格,只有我要查找的值?

还是可以使用string.match来遍历表格并只显示(打印)这些值的方法?

//更新 我有一个活动的搜索,每次用户输入一个字母,它就会搜索表格。 例子。 Val1 =“Hello” Val2 =“Goodbye” Val3 =“Hi”

当搜索并且用户输入“H”或“h”时,我想要“hello,hi”的结果出现,但不是“goodbye”。

因此,使用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
点赞
用户258523
用户258523

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

循环中的==是否意图针对v

另外,如果ALL_ITEMS是整数索引的,您可能希望使用ipairs而不是pairs按顺序遍历该表。

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

如果需要,您可以使用字符串匹配将g与循环中的cleanName进行匹配,但如果您没有比较您认为您正在比较的内容,这并不能解决问题。

2014-05-08 14:50:51