【发布时间】:2016-10-04 12:18:10
【问题描述】:
案例1:给定一个Scala字符串列表
val l =List("@description", "AC", "T", "G", "+", "ZZZZ")
有什么好办法拼接"AC", "T", "G",预期的结果是
List("@description", "ACTG", "+", "ZZZZ")
规则是从第二个元素开始,所有字符串都应该连接起来,直到遇到另一个以+ 开头的字符串。鉴于序列行可以被包装,它与FASTQ 格式解析有关。该功能预计是功能性的(又名纯)。我认为它可以用foldLeft 来实现。
更新:感谢您的回答!但是我意识到问题有点复杂,以下情况应该也可以工作
案例2,输入:
val l = List("@desc", "AA", "T", "+foo", "XX", "X", "@desc2", "TT", "C", "+bar", "Y", "YY")
预期输出:
List("@desc", "AAT", "+foo", "XXX", "@desc2", "TTC", "+bar", "YYY")
因此列表中可以有多个 FASTQ 记录。在上述情况下,有两个。描述行必须以 @ 开头。
案例3:
输入:
val l = List("@desc", "AAA", "TTT", "+foo", "@desc", "X", "@desc2", "TT", "C", "+bar", "+", "YY")
预期输出:
List("@desc", "AAATTT", "+foo", "@descX", "@desc2", "TTC", "+bar", "+YY")
这是三个中最具挑战性的案例,因为质量行(即第一行之后以“+”开头的行)也可以以 @ 或 + 开头。例如“@desc”实际上是质量的一部分,而不是另一条记录的起跑线。区分描述行和质量行的方法可能是序列行的长度和质量行的长度必须匹配。在第三种情况下,例如"AAATTT".length === "@descX".length,还有"TTC".length == "+YY".length
【问题讨论】:
-
在情况 3 中,不明确的质量线是否总是分为 2 段?
-
还有多少个带有
+的字符串在换行之前?
标签: scala