Как распечатать карту в Scala
-
05-07-2019 - |
Вопрос
Хорошо, этот вопрос кажется очень глупым, но я хочу сказать, что если вы посмотрите на Scala 2.7.6 API, то он сделает метод mappingToString устаревшим. Поэтому должна быть более элегантная альтернатива для печати карты в индивидуальном формате. Поскольку практически для любой цели наличие метода эквивалентности mkString в Map очень удобно.
Что вы, ребята, думаете об этом? Какой у вас фрагмент кода для печати карты, кроме println?
Решение
Метод mappingToString
использовался для изменения способа перевода каждой пары ключ / значение в строку, которая затем использовалась методом toString
.
Я думаю, что это паршиво. С одной стороны, это добавляет изменчивость в неизменную структуру данных. Если у вас есть особые требования к печати, вам, вероятно, лучше поместить их в другой класс.
Другие советы
mappingToString
относится к Map
.
С новой платформой коллекций в Scala2.8 Map
может быть повторен любым IterableLike
, который расширяет TraversableLike .
Метод mkstring (уже есть в 2.7 для Iterable
) затем следует использовать.
Просмотрите этот пост в блоге " Строки " Джесси , для 2.7 mkstring ()
примеров:
/*
Making use of raw strings to create a multi line string
I add a | at the beginning of each line so that we can line up the quote nicely
in source code then later strip it from the string using stripMargin
*/
scala> val quote = """|I don-t consider myself a pessimist.
| |I think of a pessimist as someone who is waiting for it to rain.
| |And I feel soaked to the skin.
|
| |Leonard Cohen"""
quote: java.lang.String =
|I don-t consider myself a pessimist.
|I think of a pessimist as someone who is waiting for it to rain.
|And I feel soaked to the skin.
|Leonard Cohen
// capilize the first character of each line
scala> val capitalized = quote.lines.
| map( _.trim.capitalize).mkString("\n")
capitalized: String =
|I don-t consider myself a pessimist.
|I think of a pessimist as someone who is waiting for it to rain.
|And I feel soaked to the skin.
|Leonard Cohen
// remove the margin of each line
scala> quote.stripMargin
res1: String =
I don-t consider myself a pessimist.
I think of a pessimist as someone who is waiting for it to rain.
And I feel soaked to the skin.
Leonard Cohen
// this is silly. I reverse the order of each word but keep the words in order
scala> quote.stripMargin.
| lines.
| map( _.split(" ").
| map(_.reverse).
| mkString (" ")).
| mkString("\n")
res16: String =
I t-nod redisnoc flesym a .tsimissep
I kniht fo a tsimissep sa enoemos ohw si gnitiaw rof ti ot .niar
dnA I leef dekaos ot eht .niks
dranoeL nehoC
Вы также можете комбинировать Iterator.map ()
с mkString ()
, например, для создания строки запроса из карты [String, String] код>:
val queryString = updatedMap.map(pair => pair._1+"="+pair._2).mkString("?","&","")