Lua 实用函数

推荐第三方库

Penlight

统计

function string.count(s)
    t = {} -- 记录统计次数信息
    for i=1, #s -- 枚举字符串中字符
        do
        a=string.sub(s,i,i) -- 找到i个
        if t[a]     -- t 中存在 a
            then
            t[a] = t[a] + 1  -- 计数 + 1
        else        -- t 中不存在 a
            t[a] = 1   -- 开始计数,a放入表中
        end
    end
    return t
end
-- 可用可不用
t = count "i love you very much, beyond your imagination."

function count(t)
    c = {} -- 记录统计次数信息
    for i, a in ipairs(t) do -- 枚举字符串中字符
        if c[a]     -- t 中存在 a
            then
            c[a] = c[a] + 1  -- 计数 + 1
        else        -- t 中不存在 a
            c[a] = 1   -- 开始计数,a放入表中
        end
    end
    return c
end
-- 不建议用括号
c = count {1,2,1,3,1}
print(c[2])

function freq(array)
    -- 计算频率
    t = count(array)
    N = #array
    for i, a in pairs(t) do
        t[i] = a / N
    end
    return t
end

t = freq{"i", "love", "you", "very", "much", "do", "you", "love", "me"}

print(t['i'])

function ngram(array, n)
    if n==nil
        then
        n=2
    end
    t={}
    N = #array
    for i=1, N-n
        do
        s ={}
        for j=1, n
            do
            s[j]=array[j+i-1]
        end
        t[i]=s
    end
    return t
end

t=ngram{"i", "love", "you", "very", "much", "do", "you", "love", "me"}

表处理

function choice(t)
    -- 从数组中随机选择
    N=#t
    r = math.random(N)
    return t[r]
end

function keys(t)
    -- 获取t的所有键
    s={}
    for k, v in pairs(t) do
        table.insert(s, 1, k)
    end
    return s
end
点赞