Как проверить последовательные значения в таблице? - PullRequest
1 голос
/ 27 сентября 2019

При проверке последовательных значений в моей таблице мой текущий код просто считает длину таблицы - однако при подсчете непоследовательных значений он работает отлично.

Моя попытка может быть замечена в кодениже;верхний код - это непоследовательный счетчик, который работает - нижний код - это мой попытавшийся и неудачный последовательный код счета.

--creates a function that counts the number of things in a table
function tCount(t,str,con)
    if con ~= true then
        local count = 0
        for _,v in pairs(t) do --key/value of table
            if v == str then --if values matches the string
                count = count + 1 --add 1 to count
            end
        end
        return count
    else --consecutive count code
        local cCount = 0
        for k,v in pairs(t) do --key/value of table
            if k == 1 then --if it's the first index
                if v == str then --if the value is equal to the inputted string
                    cCount = cCount + 1 --add 1 to consecutiveCount
                end
            else
                if v[k] == v[k-1] then --if the value is equal to the previous value
                    cCount = cCount + 1 --add 1 to consecutiveCount
                else --otherwise
                    cCount = 1 --set consecutiveCount back to 1
                end
            end
        end
        return cCount --return the consecutiveCount value
    end 
end

--debug
alpha = {"one","one","three","one","two"}
print(tCount(alpha,"one",false),tCount(alpha,"one",true))

Result: 3 5

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

Что я сделал не так и как я могу это исправить?

1 Ответ

2 голосов
/ 27 сентября 2019

v - это строка.v[k] и v[k-1] оба nil.Следовательно, ваше условие приращения cCount всегда true.

t[k] == t[k-1] или просто v == t[k-1] будет правильным.

Чтобы отладить подобные вещи, спросите себя: почемумой счет слишком высок?Потому что я слишком часто увеличиваю.Почему я часто увеличиваю?Это возможно только в том случае, если мое состояние выполняется слишком часто.Итак, давайте посмотрим, что происходит, и каждый раз выводим v [k] и v [k-1].Хорошо, оба значения равны нулю каждый раз.Почему? ... * * 1013

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...