2016-05-13 27 views
0

我在Scala中使用了play framework,我想将Seq[String]分割成子序列。如何在scala中分割序列

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

spring; summer; autumn; winter, red; green; blu

的季节和颜色都用逗号分隔,我想拆分序列得到2个子,一个是季节,另一个是颜色。

我已经试过:

val subsequence=sequecne.split(",") 

但它不工作,并返回该错误:价值分裂不是Seq[String]

所以成员,我该怎么办?

+1

这个问题我不清楚,显然给他人,以及你似乎不满意给出的解决方案。你应该提供你有什么和你想得到什么。例如:给出一个seq val的seq:seq [string] = seq(“spring; summer; autumn; winter; red,green; blu”)''你想要'Seq(Seq(“spring”,“summer” ,“秋天”,“冬天”),Seq(“红色”,“绿色”,“蓝色”)' –

回答

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") 
+0

我尝试了,但是当我做'println(split)'时,它会写: 列表:(春天;夏天;秋天;冬天,红色;绿色;蓝色) 和我我想要2个子序列分开使用它 –

+0

啊,所以你想要一个有两个元素的Seq [Seq [String]]'然后,而不是'flatMap' ,使用'.map'代替 – lloydmeta

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

我尝试过,但是当我想打印它时,我有: 空的迭代器 –

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

除了lloydmeta:

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