如何在Scala中使用循环法压缩嵌套列表?

时间:2015-09-03 12:41:23

标签: 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)

this question不同,我的列表是单一类型List[List[Int]],但看起来我也可以使用递归函数调用。

3 个答案:

答案 0 :(得分:3)

  1. 在将每个元素与嵌套列表中的索引匹配
  2. 时展平列表
  3. 按嵌套列表中的索引排序
  4. 将元组映射为整数

    list.flatMap(xs => xs.zipWithIndex).sortBy(_._2).map(_._1)
    
    //output 
    List(1, 4, 7, 2, 5, 8, 3, 6)
    

答案 1 :(得分:0)

如果这是家庭作业,您需要将其标记为。

webClient.waitForBackgroundJavaScript(5_000);
String value = htmlPage.executeJavaScript("myOwnVariable").toString();

首先,收集非空列表。如果没有,我们就完成了。否则,收集每个剩余列表的头部,并连接到roundRobin处理的尾部。

答案 2 :(得分:0)

另一种递归方法,

def g(xs:List[List[Int]]): List[Int] = {
  if (xs.flatten.isEmpty) 
    Nil 
  else 
    xs.flatMap(_.take(1)) ++ g(xs.map(_.drop(1)))
}

因此

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()