【发布时间】:2017-03-13 08:19:40
【问题描述】:
在 Scala 扁平化方面需要一些帮助。
我有一个String 和List[String] 的列表。
示例:List("I", "can't", List("do", "this"))
预期结果:List("I", "can't", "do", "this")
我做了很多实验,最紧凑的解决方案是:
val flattenList = list.flatten {
case list: List[Any] => list
case x => List(x)
}
但这似乎非常棘手且难以理解。对更幼稚的代码有什么建议吗?
谢谢。
【问题讨论】:
-
你试过
list.flatten。如果是这样,为什么它不适合你? -
@maasg:
flatten不起作用,因为 list 包含不同的数据类型,包括 String 和 List[String] -
我认为@antonkw 想知道这是如何工作的。
flatten假定列表包含另一个列表。所以,case list按原样使用,case x将 x 转换为列表。flatten文档中的示例会有所帮助:scala-lang.org/api/current/#scala.collection.immutable.List -
@antonkw 为什么需要这个?这种方法的问题是
List[Any]可能是任何东西,所以你失去了类型安全。是否可以更改此列表的创建点,以便将Strings 包装在列表中?像这样:List(List("I"), List("can't"), List("do", "this"))而不是?
标签: scala collections functional-programming