Scala:如何通过拆分字符串将字符串序列转换为元组序列

Scala: how to transform sequence of strings into a sequence of tuples by splitting strings

我正在尝试转换如下所示的序列

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(" ")))

显然这行不通,谁能给我建议?

可能是这样的:-

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

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

希望对您有所帮助!

这将优雅但安静地将所有不 split() 的输入放入 2 个元素中。

raw.map(_.split("\s+")).collect{case Array(a,b) => (a,b)}

我的版本)

raw.map(_.split(" ") match {
    case Array(a, b) => (a, b)
})

如果你想将它与更通用的正则表达式匹配结合起来,这个变体可能更可取:

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))