基于Lua数组中项目频率的添加

我有一个用于在游戏中计算得分的数组:

a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}

所有数字都应该简单相加,除非某个数字出现多次,例如 7(出现了 4 次),那么应该这样添加:

1*7 + 2*7 + 3*7 + 4*7

因此,总体而言,数组 “a” 应该得分:

score = (1*1 + 2*1) + (1*2 + 2*2) + (1*3) + (1*4) + (1*5 + 2*5 + 3*5) + (1*6 + 2*6) + (1*7 + 2*7 + 3*7 + 4*7)

我不知道从哪里开始做。这种计算有什么好的方法吗?

任何帮助都将不胜感激。

点赞
用户501459
用户501459

你可以在另一个表格中跟踪每个数字的当前倍数:

function calculateScore(a)
    local multipliers = {}
    local score = 0
    for i,number in ipairs(a) do
        local multiplier = multipliers[number] or 1
        multipliers[number] = multiplier + 1
        score = score + number * multiplier
    end
    return score
end

local a = {1,7,5,1,2,6,2,3,4,5,5,6,7,7,7}
local score = calculateScore(a)
2015-09-16 00:33:14