我从头开始编写了一个flatten函数,它将一个嵌套列表作为输入并输出另一个。
def flatten[A] (list:List[List[A]]):List[A]
我使用scala的':::'来绑定两个列表,它运行正常。但是,我的练习禁止我使用那种或任何内置的方法(从个人scala书中练习)。
现在,我编写了一个帮助方法,它合并了这两个名为merge的列表。
如何在新版本的函数中展开合并?
答案 0 :(得分:0)
如果您有方法合并,可以使用 foldLeft 来展平列表列表:
list.foldLeft(List[A]())(merge)
答案 1 :(得分:0)
def merge1[T](l1: List[T], l2: List[T]): List[T] =
l1.reverse.foldLeft(l2)((acc, e) => e :: acc)
/** for large lists will throws Stackoverflow */
def merge2[T](l1: List[T], l2: List[T]): List[T] =
l1.foldRight(l2)((e, acc) => e :: acc)
def flatten[A](list: List[List[A]]): List[A] =
list.foldLeft(Nil: List[A])(merge1)
如果您想将merge
方法添加到List
类型,可以写下:
implicit class ListExt[T](l: List[T]) {
def merge(l2: List[T]): List[T] = merge1(l, l2)
}
def flatten2[A](list: List[List[A]]): List[A] =
list.foldLeft(Nil: List[A])((acc, e) => acc merge e)