我有一个很长的条件逻辑。想要有一个有效的方法来做到这一点。
(city, country) match {
("USA","NewYork") => someVal=1.0
("USA","SomeOther")=> someVal =2.0
....
}
我在循环中有这个查找逻辑,我该如何干净地做到这一点。可能是 Scala 中的多键映射或策略模式
我有一个很长的条件逻辑。想要有一个有效的方法来做到这一点。
(city, country) match {
("USA","NewYork") => someVal=1.0
("USA","SomeOther")=> someVal =2.0
....
}
我在循环中有这个查找逻辑,我该如何干净地做到这一点。可能是 Scala 中的多键映射或策略模式
你有一些方法可以做到这一点。除了使用的一种用途外,您还可以尝试:
val map1: Map[(String, String), Double]
map1((country, city)): Double // or
map1.get((country, city)): Option[Double]
或者
val map2: Map[String, Map[String, Double]]
map2(country)(city): Double
map2.get(country).flatMap(_.get(city)): Option[Double]
哪个更快?我不知道。您必须为您的用例制定基准。Map
可能比match
没有基准测试要快,但没有人能说出多少。哪个地图更快?map1
还是map2
?我们可能会猜测,但没有针对您的用例的基准,这只是猜测。
不幸的是,除非你在JMH中运行它并比较结果,否则它可能只是冷 JVM 的结果。
而且,只要您String
用作键,就很难提出诸如Strategy
GoF 之类的解决方案等,因为它们依赖于能够向类添加一些属性/方法以使计算更便宜和/或依赖于存在有限数量的可能性这一事实解锁了一些优化。