У вас есть несколько способов сделать это. Помимо одного использованного вы можете попробовать также:
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, et c, потому что они полагаются на возможность добавьте некоторое свойство / метод к классу, чтобы сделать вычисления более дешевыми и / или из-за того, что существует конечное число возможностей, которое открывает некоторые оптимизации.