我有一个由行组组成的文件。每一组代表一个事件。组的结束用"end"表示。我可以考虑使用for循环来遍历行,存储中间行,并在遇到"END"时发出组。
但是因为我想用Scala来做。我想知道是否有人可以建议一个更有效的方式来完成同样的事情?
----------
A
B
C
END
----------
D
E
F
END
----------
定义一个迭代器来返回组
def groupIterator(xs:Iterator[String]) =
new Iterator[List[String]]
{ def hasNext = xs.hasNext; def next = xs.takeWhile(_ != "END").toList}
测试(使用Iterator[String]
,但Source.getLines
将为您的文件行返回一个迭代器)
val str = """
A
B
C
END
D
E
F
END
""".trim
for (g <- groupIterator(str.split('n').toIterator)) println(g)
//> List(A, B, C)
//| List(D, E, F)