如何在Scala中使用循环法展平嵌套列表?
您将如何在Scala中展平此列表:如何在Scala中使用循环法展平嵌套列表?,scala,Scala,您将如何在Scala中展平此列表:List(List(1,2,3),Nil,List(4,5,6),List(7,8))以使其进行循环,而不仅仅像flatMap那样附加所有元素?期望的结果是:List(1,4,7,2,5,8,3,6) 与我的列表不同的是,它是单一类型的list[list[Int]],但看起来我也可以使用递归函数调用 将列表展平,同时将每个元素与其嵌套列表中的索引进行匹配 按嵌套列表中的索引排序 将元组映射为整数 list.flatMap(xs => xs.zipWithI
List(List(1,2,3),Nil,List(4,5,6),List(7,8))
以使其进行循环,而不仅仅像flatMap
那样附加所有元素?期望的结果是:List(1,4,7,2,5,8,3,6)
与我的列表不同的是,它是单一类型的list[list[Int]]
,但看起来我也可以使用递归函数调用
list.flatMap(xs => xs.zipWithIndex).sortBy(_._2).map(_._1)
//output
List(1, 4, 7, 2, 5, 8, 3, 6)
如果这是一项家庭作业,你需要将其标记为家庭作业
def roundRobin(input: List[List[Int]]): List[Int] = {
val m = input.filter(_.size > 0)
if ( m.size > 0 )
m map (mh => mh.head) ::: roundRobin(m map (mt => mt.tail)))
else
Nil
}
首先,收集非空列表。如果没有,我们就完了。否则,收集每个剩余列表的头部,并连接到循环处理的尾部。另一种递归方法
def g(xs:List[List[Int]]): List[Int] = {
if (xs.flatten.isEmpty)
Nil
else
xs.flatMap(_.take(1)) ++ g(xs.map(_.drop(1)))
}
因此
及
如果它是一个矩阵,也就是说所有嵌套列表都有相同的长度,那么可能的重复就非常容易了
l.transpose.flatten
@dcastro:transpose
做什么,取最小的宽度和高度?@Bergi它旋转一个矩阵。因此,List(List(1,2,3),List(4,5,6))
变成了List(List(1,4),List(2,5),List(3,6))
@Bergi抛出了一个异常。这就是为什么我们不能在这里使用转置。
g(List(List(1, 2, 3), List(), List(4, 5, 6), List(7, 8)))
List(1, 4, 7, 2, 5, 8, 3, 6)
g(List(Nil))
List()