创建混合和最大函数

我有一个函数,在两个供应商的元素之间告诉我是否存在交叉项(不允许)。 我不会进入如何构建它,因为这需要很多解释,我试图保持简单。 你需要知道的是,它需要两个联系的供应商名称,并返回 true/false,如果它们没有重叠或重叠(分别)。 例如:

noCrossover["TescoSainsburys"] = true

现在,我想找到获取产品 A 的最佳商店组合,而不需要多次调用源。 对于只有两个商店,这很容易(我之前构建了一个包含供应商的表):

vendorsCalled = {"Tesco", "Sainsburys"}

if noCrossover[vendorsCalled[1] .. vendorsCalled[2]] then
    numProductsAgr = tescoProductA + sainsburysProductA
else
    numProductsAgr = math.max(tescoProductA, sainsburysProductA)
end

然而,随着供应商数量的增加,它变得更加复杂:

vendorsCalled = {"Tesco", "Sainsburys", Waitrose"}

if  noCrossover[vendorsCalled[1] .. vendorsCalled[2]] and
    noCrossover[vendorsCalled[1] .. vendorsCalled[3]] and
    noCrossover[vendorsCalled[2] .. vendorsCalled[3]] then
        numProductsAgr123 = tescoProductA + sainsburysProductA + waitroseProductA
    else
        numProductsAgr123 = 0
end
if noCrossover[vendorsCalled[1] .. vendorsCalled[2]] then
    numProductsAgr12 = tescoProductA + sainsburysProductA
else
    numProductsAgr12 = math.max(tescoProductA, sainsburysProductA)
end
if noCrossover[vendorsCalled[1] .. vendorsCalled[3]] then
    numProductsAgr13 = tescoProductA + waitroseProductA
else
    numProductsAgr13= math.max(tescoProductA, waitroseProductA)
end
if noCrossover[vendorsCalled[2] .. vendorsCalled[3]] then
    numProductsAgr23 = sainsburysProductA + waitroseProductA
else
    numProductsAgr23 = math.max(sainsburysProductA + waitroseProductA)
end
numResidencyMatchesAgr = math.max(numProductsAgr123 , numProductsAgr12 , numProductsAgr13 , numProductsAgr23 )

并且使用 4 后又变得更难了。

还值得注意的是,这些在不同的地方使用(1、2、3、4 个商店),所以我可以为每个商店定义使用多少个函数。

我还需要能够计算我的最终数字来自哪些供应商

有没有更好、更简洁的方法来避免需要编写这些容易出错的脚本?

点赞