Вы можете использовать foldLeft
:
val func2 = (r: Map[Int,String], i: Int) => r + (i -> func(i))
s.foldLeft(Map.empty[Int,String])(func2)
Это будет работать лучше, чем решение Джеспера, потому что foldLeft
создает Map
за один проход.Код Джеспера сначала создает промежуточную структуру данных, которую затем необходимо преобразовать в окончательное Map
.
Обновление: Я написал микро-тест , проверяющий скоростькаждого из ответов:
Jesper (original): 35s 738ms
Jesper (improved): 11s 618ms
dbyrne: 11s 906ms
Rex Kerr: 12s 206ms
Eastsun: 11s 988ms
Похоже, все они в значительной степени одинаковы, если вы избегаете построения промежуточной структуры данных.