如何在scala中拆分序列

时间:2016-05-13 08:32:38

标签: scala

我在Scala中使用Play框架,我希望将Seq[String]拆分为子序列。

我从包含颜色和季节的SQL查询返回Seq[String],它看起来像这样:

  

弹簧;夏季;秋季;冬天,红色;绿色;蓝光

季节和颜色用逗号分隔,我希望将该序列拆分为2个子序列,一个是季节,另一个是颜色。

我试过了:

val subsequence=sequecne.split(",")

但它不起作用并返回该错误:值拆分不是Seq[String]的成员

那我该怎么办?

4 个答案:

答案 0 :(得分:0)

假设您的sequence类似于包含一个字符串的序列:

val sequence = Seq("spring; summer; autumn; winter, red; green; blu")
val split = sequence.flatMap(_.split(","))
// => split: Seq[String] = List(spring; summer; autumn; winter, " red; green; blu")

答案 1 :(得分:0)

尝试分组,

val xs = Seq("spring; summer; autumn; winter, red; green; blu")
val groups = xs.head.split(",|;").map(_.trim).grouped(4)

这提供了一个最多包含4个项目的迭代器。最后一个数组只包含3种颜色。

要查看迭代器中的内容,

groups.toArray
Array(Array(spring, summer, autumn, winter), 
      Array(red, green, blu))

答案 2 :(得分:0)

这应该根据序列中的单个元素为您提供您想要的内容,并为您提供一种方法来处理您在SQL查询的字符串结果中没有预期数据的情况。如果需要,您可能需要进行一些字符串修剪。

val xs = Seq("spring; summer; autumn; winter, red; green; blu")

val ys = xs.head.split(",") match {
  case Array(seasons, colours) => Array(seasons.split(";"), colours.split(";"))
  case _ => ??? // unexpected case - handle appropriately
}

println(ys.toList.map(_.toList))

// List(List(spring,  summer,  autumn,  winter), List( red,  green,  blu))

答案 3 :(得分:0)

除了lloydmeta:

sequence.flatMap(_.split(",")).map(_.split(";"))