Удаление типа данных из кортежа при печати в Scala - PullRequest
0 голосов
/ 14 апреля 2020

В настоящее время у меня есть две карты: -

mapBuffer = Map[String, ListBuffer[(Int, String, Float)]
personalMapBuffer = Map[mapBuffer, String]

Идея, которую я пытаюсь сделать, состоит в том, чтобы создать список чего-либо, а затем позволить пользователю создать персональный список, который включает комментарий так что у них будет свой список карт.

Я просто пытаюсь распечатать информацию, так как все хорошо из вышеперечисленного.

Чтобы распечатать ключ из mapBuffer, я использую: -

mapBuffer.foreach(line => println(line._1))

Это возвращает: -

Sample String 1
Sample String 2

Чтобы напечатать ту же вещь из personalMapBuffer, я использую : -

personalMapBuffer.foreach(line => println(line._1.map(_._1)))

Однако это возвращает: -

List(Sample String 1)
List(Sample String 2)

Я, очевидно, хотел бы, чтобы он просто возвратил "Sample String" и удалил аспект List (). Я предполагаю, что это как-то связано с функцией .map, хотя это был единственный способ найти доступ к кортежу внутри кортежа. Есть ли простой способ удалить тип данных? Я надеялся на что-то простое, например: -

line._1.map(_._1).removeDataType

Но, очевидно, такой предварительной функции не существует. Я очень плохо знаком с Scala, так что это может быть что-то чрезвычайно простое (что я надеюсь, что это ха-ха), или это может быть немного сложнее. Любая помощь будет отличной.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я нашел способ получить искомый результат, однако я не уверен, что это лучший способ.

Метод .map () просто возвращает коллекцию. Вы можете увидеть больше информации об этом здесь: - https://www.geeksforgeeks.org/scala-map-method/

Используя в конце любой вид спецификатора элемента c, я могу вернуть только элемент и не тип данных. Например: -

line._1.map(_._1).head

Когда я писал это, Иван Курченко ответил выше, предлагая мне использовать .mkString. Это также работает и выглядит немного лучше, чем .head в моем уме.

line._1.map(_._1).mkString("")

Опять же, я не на 100%, если это самый эффективный способ, но если он нужен для чего-то, этот способ пока работает для меня.

0 голосов
/ 14 апреля 2020

Что вы видите, если по умолчанию List.toString поведение. Вы строите свою собственную строку с помощью операции mkString:

val separator = ","
personalMapBuffer.foreach(line => println(line._1.map(_._1.mkString(separator))))

, которая даст желаемый результат Sample String 1 или Sample String 1, Sample String 2, если будет 2 строки.

Надеюсь, это поможет!

...