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