如何检查表中连续的值?

在检查表中的连续值时,我的当前代码只计算表的长度 - 然而,在计算非连续值时,它可以正确地工作。

我的尝试在下面的代码中可以看到;顶部代码是非连续计数,它可以正常工作 - 底部代码是我尝试过的,但失败了的连续计数代码。

-- 创建一个计算表中物品数量的函数
function tCount(t,str,con)
    if con ~= true then
        local count = 0
        for _,v in pairs(t) do --表的键/值
            if v == str then --如果值与字符串匹配
                count = count + 1 --计数器加1
            end
        end
        return count
    else --连续计数代码
        local cCount = 0
        for k,v in pairs(t) do --表的键/值
            if k == 1 then --如果它是第一个索引
                if v == str then --如果值等于输入的字符串
                    cCount = cCount + 1 --连续计数器加1
                end
            else
                if v[k] == v[k-1] then --如果值等于上一个值
                    cCount = cCount + 1 --连续计数器加1
                else --否则
                    cCount = 1 --连续计数器重新设为1
                end
            end
        end
        return cCount --返回连续计数器的值
    end
end

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

Result: 3 5

我希望它在每次出现新值时重新开始计数,而目前它只计算每个值。

我哪里做错了,我该如何修复?

点赞
用户2858170
用户2858170

v 是一个字符串。v[k]v[k-1] 都是 nil。因此,增加 cCount 的条件总是为true

t[k] == t[k-1] 或者只是 v == t[k-1] 才是正确的。

为了调试这样的问题,问问自己:为什么我的计数太高?因为我太频繁地增加了。为什么我会经常增加?只有当我的条件太频繁成立时才有可能。所以让我们看看发生了什么,并在每次打印 v\[k\]v\[k-1\] 。好的,每次都是 nil,为什么?...

2019-09-27 10:40:53