【发布时间】:2011-11-09 18:04:15
【问题描述】:
在一个文本文件中,我有以下形式的数据:
1)
text
text
2)
more text
3)
even more text
more even text
even more text
...
我使用以下内容将其作为字符串列表读取:
val input = io.Source.fromFile("filename.txt").getLines().toList
我想将列表分解为以1)、2) 等开头的子列表。
我想出了:
val subLists =
input.foldRight( List(List[String]()) ) {
(x, acc) =>
if (x.matches("""[0-9]+\)""")) List() :: (x :: acc.head) :: acc.tail
else (x :: acc.head) :: acc.tail
}.tail
这可以更简单地实现吗?如果有一个内置方法可以在满足谓词的每个元素上拆分集合(提示、提示、库设计者:)),那将是非常好的。
【问题讨论】:
-
看看这个问题和接受的答案:stackoverflow.com/questions/6800737/…
-
在那个答案中可以使用迭代器,但这种情况更复杂,因为每个标题都不同,所以你需要第二个迭代器/列表作为标题,它不再是优雅的。递归似乎更简洁。
标签: list scala collections