如何在Scala中从嵌套列表l1得到指定扁平化结果列表?
Scala嵌套列表扁平化实现
给定嵌套列表:
val l1 = List(1,2,List(3,List(4,5,6),5,6,7))
要将其转换为扁平化且去重后的列表List(1,2,3,4,5,6,7),可以通过以下方式实现:
方法一:递归+模式匹配
编写递归函数,通过模式匹配区分元素类型:如果是整数则直接保留,如果是列表则递归扁平化,最后通过distinct去重得到目标结果。
def flatten(list: List[Any]): List[Int] = list match { case Nil => Nil case (num: Int) :: rest => num :: flatten(rest) case (subList: List[_]) :: rest => flatten(subList) ::: flatten(rest) } val result = flatten(l1).distinct // result: List[Int] = List(1, 2, 3, 4, 5, 6, 7)
方法二:flatMap结合递归
利用flatMap简化递归逻辑,同样通过模式匹配处理不同类型元素:
def flattenList(list: List[Any]): List[Int] = list.flatMap { case i: Int => List(i) case subList: List[_] => flattenList(subList) } val result = flattenList(l1).distinct // result: List[Int] = List(1, 2, 3, 4, 5, 6, 7)
说明
- 原嵌套列表扁平化后默认会保留重复元素(如
5、6各出现两次),调用distinct方法可去除重复值,得到目标列表。 - 上述函数支持任意深度的嵌套列表处理,只要元素类型为
Int或嵌套的List即可。
内容的提问来源于stack exchange,提问作者Lokesh G
相关产品推荐
相关产品推荐

