【发布时间】:2015-02-19 17:54:03
【问题描述】:
给定一个 Scala 序列...
val sequence: Seq = List( 3, 1, 4, 1, 5, 9, 2, 6, 5 )
...假设我想找到所有符合某些条件的子序列,例如奇数字符串,并用对该子序列的某些操作的结果替换它们,比如它的长度,产生一个新序列:
val sequence2: Seq = List( 2, 4, 3, 2, 6, 1 )
(是的,这是一个相当人为的例子,但很简洁。)
到目前为止,我能做的最好的就是这个丑陋的命令式黑客:
val sequence: Seq[Int] = List( 3, 1, 4, 1, 5, 9, 2, 6, 5 )
var sequence2 = List[Int]() // this is going to be our result
var subsequence = List[Int]()
for (s <- sequence) {
if (s % 2 == 0) {
if (!subsequence.isEmpty) {
sequence2 = sequence2 :+ subsequence.length
subsequence = List[Int]()
}
sequence2 = sequence2 :+ s
} else {
subsequence = subsequence :+ s
}
}
if (!subsequence.isEmpty) {
sequence2 = sequence2 :+ subsequence.length
}
有没有一种优雅(/实用)的方式来做到这一点?
【问题讨论】:
标签: scala collections