Имея
val a: IndexedSeq[String] = Array("one", "two", "three")
def f(s: String): Int = s match {
case "one" => 1; case "two" => 2; case "three" => 3;
case _ => throw new IllegalArgumentException
}
как мне лучше узнать
val m: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
при условии, что я не возражаю против введения прокси-функции для возврата пар ключ-значение в виде кортежей, если это будет лучшим решением.
PS: На самом деле меня интересует, как сопоставить коллекцию с коллекцией другого желаемого типа, но я выбрал этот пример как частный случай, чтобы проиллюстрировать и сделать вопрос более конкретным. Это означает, что решение для конкретного случая (IndexedSeq to Map) является приемлемым, но приветствуются более общие комментарии. Прямо сейчас я использую foreach
для заполнения изменяемого буфера карты для таких случаев, но это кажется слишком далеким от истинного функционального способа Scala, ИМХО. Я обнаружил, что использую слишком много foreach
и изменяемых буферов, что заставляет меня нервничать, и поэтому я задаю все эти вопросы о отображении.