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

时间:2015-09-15 23:34:25

标签: arrays 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)

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

您可以跟踪另一个表中每个数字的当前乘数:

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)