2017-02-22 11 views
1

Как бы я мог подсчитать количество строк, которые происходят в таблице?Как подсчитать количество строк, появляющихся в таблице строк в Lua?

В принципе у меня есть таблица, которая похожа, скажем, 200, например, (но она больше) ... каждая запись имеет подзаголовок, называемый именем.

так ..

itemlist[i].name == somestring. 

Теперь я могу искать и найти матч довольно легко, используя, если Постулаты во время цикла, хотя за столом ...

if string.find(string.lower(itemlist[i].name), string.lower(searchString)) ~= nil then 

Так сказать, Я ищу Томас, он вернется, когда найдет «Томас Ф Мэлоун».

В некоторых случаях существует более одного результата для значения поиска .. например .. говорят, что есть три разных имени, которые все начинаются с Томаса.

На данный момент он просто найдет первое появление Томаса.

Итак, план состоит в том, чтобы подсчитать все вхождения Томаса, а затем вывести все из них ... но я не могу решить, как получить числовое значение того, сколько раз результат найден в таблице.

TL; DR - Как я могу подсчитать количество вхождений строки в таблице?

ответ

0

Просто не останавливайте повторение над столом, как только вы что-то нашли. Продолжайте движение и увеличивайте переменную счетчика каждый раз, когда вы найдете свою строку, или поместите результаты в таблицу и подсчитайте ее элементы позже.

local texts = {"a123", "b213", "a332", "d411", "a124"} 
local result = {} 
for i,v in ipairs(texts) do 

    if string.find(v, "a") then 
    table.insert(result, v) 
    end 

end 

print(#result) 
1

Когда вы нашли соответствующие значения, храните их во временной таблице, например. table.insert(temporaryTable, value) вместо отказа от функции с использованием return. Ниже вы можете найти примерную функцию, которая собирает и подсчитывает появление строки запроса в переменной внутри многомерной таблицы (или видит ее в действии here).

--data 
itemList = { 
    {name = "Denny Kuhlman", id = "6688"}, 
    {name = "Russell Leisy", id = "3751"}, 
    {name = "Hilario Stermer", id = "1886"}, 
    {name = "Thomas Hemming", id = "9666"}, 
    {name = "Samuel Lafuente", id = "8232"}, 
    {name = "Lazaro Ashby", id = "5274"}, 
    {name = "Ronnie Nicosia", id = "9664"}, 
    {name = "Edison Seyal", id = "1344"}, 
    {name = "Jerald Officer", id = "9497"}, 
    {name = "Lupe Burdge", id = "266"}, 
    {name = "Stephan Iler", id = "5968"}, 
    {name = "Josue Stephens", id = "2128"}, 
    {name = "Salvador Ortmann", id = "3643"}, 
    {name = "Tony Ricker", id = "8799"}, 
    {name = "Corey Carbone", id = "6485"}, 
    {name = "Conrad Theberge", id = "139"}, 
    {name = "Arnulfo Oquendo", id = "2861"}, 
    {name = "Damien Balsley", id = "5572"}, 
    {name = "Efren Sloop", id = "7106"}, 
    {name = "Blair Clagon", id = "614"}, 
    {name = "Dario Service", id = "1411"}, 
    {name = "Paul Ashalintubbi", id = "3403"}, 
    {name = "Felix Veal", id = "1539"}, 
    {name = "Laurence Caskey", id = "2827"}, 
    {name = "Will Ranallo", id = "8463"}, 
    {name = "Thomas Brenner", id = "9599"}, 
    {name = "Claudio Hallmark", id = "6265"}, 
    {name = "Nolan Haslett", id = "9661"}, 
    {name = "Lenard Pereira", id = "5652"}, 
    {name = "Dusty Duer", id = "4034"}, 
} 

-- 
function countStringOccurence(query, itemList) 
    query = string.lower(query) 

    --if query string is found, store index of the itemList in table searchResult 
    local searchResult = {} 
    for i, item in ipairs(itemList) do 
    local name = string.lower(item.name) 
    if string.find(name, query) then 
     table.insert(searchResult, i) 
    end 
    end 

    --return both the occurence count and the list of found item 
    return #searchResult, searchResult 
end 

--execute the function 
count, foundItemList = countStringOccurence("thomas", itemList) 

--print results 
print(count)       --> 2 

for i, index in ipairs(foundItemList) do 
    print(index, itemList[index].name) --> 4  Thomas Hemming 
             --> 26  Thomas Brenner 
end 

NB: Обратите внимание, что если таблица/список ваших записей могут быть перемещены (например sort), он не может быть целесообразно только хранить индекс массива, так как ссылки/значения, собранные в foundItemList может быть неточным.

Смежные вопросы