scala - 如何将行/字符串列表制作成子列表
问题描述
抱歉,如果以前有人问过这个问题,但我一直在寻找解决方案。
我有一个字符串列表;
val a = List("size 34", "help","panne","size 35","kake", "test","size 34", "help", "panne","size 35", "kake", "test")
我想让它们成为一个多重列表。喜欢;
val b = List("size 34", "help","panne")
val c = List("size 35","kake", "test")
例如,当它看到某个单词的开头时,我想将原始列表拆分为一个新列表;当字符串以 size 开头时,它会拆分为一个新列表。
我已经弄清楚如何获得某个字符串;
val sequenceWithPlainAndGlazedDonut = a.filter { a => a.contains("size")}
我想要从单词大小(即使它更多到字符串,即数字)到下一次显示单词大小的新列表。
最好的方法是什么?
解决方案
您可以使用foldLeft
或其符号版本/:
val newList = (List.empty[List[String]] /: a) {(agg, elem) =>
if (elem startsWith "size ") List(elem) :: agg
else agg match {
case head :: tail => (elem :: head) :: tail
case Nil => agg
}
}
这将以相反的顺序为您提供内部和外部列表,如果您需要原始顺序,您可以这样做:
newList.map(_.reverse).reverse
推荐阅读
- ios - 使用 Swift 在双变量中尾随零
- python-3.x - AttributeError:“计时器”对象没有属性“_seed”
- arrays - VBA:从数组中批量设置范围对象的变量,而不是.value
- php - PHP 将一个多维数组的子元素合并到另一个内联数组中
- wpf - “请求失败,响应为空。” 从 VM 移动到 Azure 应用服务后,某些系统中的 SOAP 请求错误。
- typescript - 如何在 Typescript 中使用 XMLHttpRequest?
- docker - 执行 docker-compose 命令后出现错误 yaml.scanner.ScannerError
- authentication - 沙盒中的贝宝身份验证失败
- elasticsearch - Confluentinc 连接器。一个弹性搜索索引中的多个连接器。以特定文档类型发布
- r - 在 ggpairs 中添加 ylabel 和点形状变化