Algorithm 实施不同类型的价格矩阵

Algorithm 实施不同类型的价格矩阵,algorithm,design-patterns,kotlin,Algorithm,Design Patterns,Kotlin,在我的应用程序中,我有一些会员类型。我想提前计算上述所有可能的价格组合,并为每个会员提供一个对象 假设用户选择黄金会员资格,我希望计算(值x利率)的每个组合,并以某种对象呈现给用户 我如何实现这一点?我可以使用什么样的数据结构、设计 如果用户愿意,可以选择多个成员资格,在这种情况下,它应该显示两个成员资格的所有价值/费率组合 我有这样的例子: Membership || interest rate Gold || 0.12, 0.20, 0.3 Silver

在我的应用程序中,我有一些会员类型。我想提前计算上述所有可能的价格组合,并为每个会员提供一个对象

假设用户选择黄金会员资格,我希望计算(值x利率)的每个组合,并以某种对象呈现给用户

我如何实现这一点?我可以使用什么样的数据结构、设计

如果用户愿意,可以选择多个成员资格,在这种情况下,它应该显示两个成员资格的所有价值/费率组合

我有这样的例子:

Membership      || interest rate
Gold            || 0.12, 0.20, 0.3
Silver          || 0.13, 0.24, 0.3
Bronze          || 10.1, 0.2, 0.3

Membership      || value rate
Gold            || 10, 20, 30
Silver          || 10, 50, 40

好的,我不知道你们需要什么样的计算逻辑。但我提供了一个例子,你如何做到这一点:

        rates
Values   0.12       0.20            0.3
10      10*0.12     10*0.20         10*0.3
20      20*0.12     20*0.20         20*0.3
30      30*0.12     30*0.20         30*0.3
数据类结果(val值:BigDecimal,val率:BigDecimal,val结果:BigDecimal)
密封类成员{
抽象val利率:列表
抽象值选项:列表
fun calcCombinations()=this.valueOptions.map{vo->
此为.interestRates.map{
结果(vo,it,vo*it)
}
}
对象:成员资格(){
override val interestRates=listOf(BigDecimal(“0.13”)、BigDecimal(“0.24”)、BigDecimal(“0.3”))
override val valueOptions=listOf(BigDecimal(10)、BigDecimal(50)、BigDecimal(40))
}
对象:成员资格(){
override val interestRates=listOf(BigDecimal(“0.12”)、BigDecimal(“0.2”)、BigDecimal(“0.3”))
override val valueOptions=listOf(BigDecimal(10)、BigDecimal(20)、BigDecimal(30))
}
}
对象主体{
@JvmStatic
趣味主线(args:Array){
println(GOLD.calcCombinations())
println(SILVER.calcCombinations())
val Membership ToCombinations=集合(金、银)。关联({
信息技术
}, {
it.calcCombinations()
})
println(会员资格组合[银牌])
println(会员资格组合[黄金])
}
}

给出所有组合计算的示例。仅适用于黄金以及黄金和白银。@EldarAgalarov-添加了黄金组合。如何在每个成员身份类型的某个对象中表示结果?好的,看看我的答案。谢谢,这帮助我理解了
associatedBy()
。但是,这不会告诉我结果是哪个值/比率组合,因此我会丢失这些信息。我们能用属性在对象中捕获,
速率
结果
fun calculateQuote(score: Int, memberShipSelected: List<MembershipType>): Quote {//TODO}
        rates
Values   0.12       0.20            0.3
10      10*0.12     10*0.20         10*0.3
20      20*0.12     20*0.20         20*0.3
30      30*0.12     30*0.20         30*0.3
data class Result(val value: BigDecimal, val rate: BigDecimal, val result: BigDecimal)

sealed class Membership {

    abstract val interestRates: List<BigDecimal>
    abstract val valueOptions: List<BigDecimal>

    fun calcCombinations() = this.valueOptions.map { vo ->
        this.interestRates.map {
            Result(vo, it, vo * it)
        }
    }

    object SILVER : Membership() {
        override val interestRates = listOf(BigDecimal("0.13"), BigDecimal("0.24"), BigDecimal("0.3"))

        override val valueOptions = listOf(BigDecimal(10), BigDecimal(50), BigDecimal(40))
    }

    object GOLD : Membership() {

        override val interestRates = listOf(BigDecimal("0.12"), BigDecimal("0.2"), BigDecimal("0.3"))

        override val valueOptions = listOf(BigDecimal(10), BigDecimal(20), BigDecimal(30))
    }
}

object Main {

    @JvmStatic
    fun main(args: Array<String>) {
        println(GOLD.calcCombinations())
        println(SILVER.calcCombinations())

        val membershipToCombinations = setOf(GOLD, SILVER).associateBy({
            it
        }, {
            it.calcCombinations()
        })

        println(membershipToCombinations[SILVER])
        println(membershipToCombinations[GOLD])
    }
}