Scala: как преобразовать последовательность строк в последовательность кортежей, разбивая строки - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь преобразовать последовательность, подобную приведенной ниже

val raw: Seq[String] = Seq("timmy barns", "jimmy smith", "mark middle")

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

val parsed: Seq[(String, String)] = Seq(("timmy", "barns"), ("jimmy", "smith"), ("mark", "middle"))

Лучшее, что я могу придумать, эточто-то вроде этого.

val parsed: Seq[(String, String)] = Seq(raw.map(i => i.split(" ")))

Очевидно, что это не сработает, кто-нибудь может дать мне предложения?

Ответы [ 4 ]

0 голосов
/ 12 июня 2018

Если вы хотите объединить его с более общим сопоставлением регулярных выражений, этот вариант может быть предпочтительным:

val P = "(\\w+) +(\\w+)".r 
val result = for (P(x, y) <- raw) yield (x, y)

дает:

result: Seq[(String, String)] = List((timmy,barns), (jimmy,smith), (mark,middle))
0 голосов
/ 12 июня 2018

Это изящно, но тихо, отбросит весь ввод, который не split(), на 2 элемента.

raw.map(_.split("\\s+")).collect{case Array(a,b) => (a,b)}
0 голосов
/ 12 июня 2018

Моя версия)

raw.map(_.split(" ") match {
    case Array(a, b) => (a, b)
})
0 голосов
/ 12 июня 2018

Может быть что-то вроде этого: -

val raw: Seq[String] = Seq("timmy barns", "jimmy smith", "mark middle")

val splitRaw = raw.map { x =>
  (x.split(" ").head, x.split(" ").last)
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...