我有一个很长的条件逻辑。希望有一个有效的方法。
(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中的任何内容,因为它们依赖于能够向该类添加某些属性/方法的原因使计算更便宜和/或基于有限数量的可能性可以解锁某些优化这一事实。