Scala лучший способ превратить Коллекцию в Карту под ключ? (2-й вариант)

Поскольку отладка многопоточных приложений с операторами печати сведет Вас с ума. Да можно все еще сделать это с операторами печати, но Вам были бы нужны многие из них, и распутывание последовательной печати из операторов для эмуляции многопоточного executiong будет долго занимать много времени.

Человеческие мозги являются только однопоточными, к сожалению.

8
задан Community 23 May 2017 в 02:19
поделиться

2 ответа

В Scala 2.8.0:

list.groupBy(_.length)

Нет ничего проще!

19
ответ дан 3 November 2019 в 14:38
поделиться

Если вы не против плохой производительности:

val list = List( "foo", "bar", "spam" )
val keyValue = for (length <- list map (_ length) removeDuplicates;
                    strings = list filter (_.length == length)) 
               yield (length -> strings)
val map = Map(keyValue: _*)

Проблема в том, что список читается снова для каждой разной длины.

Теперь о безобразии вашей версии, возможно, это помогает:

list.foldLeft(Map[Long, List[String]]()) {
  (m, s) => m(s.length) = s :: m.getOrElse(s.length, Nil)
}

Лучше? Это все еще не совсем хорошо, потому что вы получаете длину вдвое. У этого нет этой проблемы, но он немного уродливее:

list.foldLeft(Map[Long, List[String]]()) {
  (m, s) => val length = s.length; m(length) = s :: m.getOrElse(length, Nil)
}
7
ответ дан 3 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: