【问题标题】:Scala - Create Multiple List from a listScala - 从列表创建多个列表
【发布时间】:2020-08-04 11:30:26
【问题描述】:

flatMap 从命令行获取整数输入。 必须生成一个列表,列表中元素的输入数量从 1 开始。 因此,当输入为 3 时,必须生成List(1,2,3)。 List 中的每个数字都生成了numberList = List(1,2,3) 必须用于创建单独的列表,其元素等于从 1 开始的数字。 因此,当输入为 3 时;列表(1),列表(1, 2),列表(1,2,3) 必须创建并连接在一起以将输出结果列表作为List(1, 1, 2, 1, 2, 3)

【问题讨论】:

  • 输入输出背后的逻辑是什么?你试过什么?你有哪些限制?
  • 从命令行取整数.. 比如说 3. 它应该将输出创建为 List(1,2,3).. 然后这个作为输入将创建 O/P 作为 List(1), List (1, 2), List(1,2,3).. 那么最终输出将是 List(1, 1, 2, 1, 2, 3)。
  • object flatMapUsage{ def main(args :Array[String]){ val input :Int = args(0).toInt val numberList = List.tabulate(input)(input=>input+1) def listGenerator = ((1 to Input.size).map(x => Input.take(x)).mkString(", ")) val resultList = numberList.flatMap(listGenerator) println(resultList) println(resultList.length ) } }
  • 请编辑问题并正确格式化您的代码,而不是添加 cmets。 -顺便说一句,只是为了确保我理解,这个想法是创建一个最终列表,其中包含从 1n 的所有元素,在到达每个新元素后,它会一遍又一遍地开始。
  • 当 n = 4 时会发生什么?它是否再次循环通过中间循环: List(1), List(1,2) , List(1,2,3), List(1,2,3,4) ?您期望的输出是什么。是列表(1,1,2,1,2,3,1,2,3,4)

标签: list scala flatmap


【解决方案1】:

1-liner(只是为了好玩)。

def f(n :Int) = (n to 1 by -1).tails.flatten.toList.reverse

def f(n :Int) = List.tabulate(n)(x => 1 to (x+1)).flatten

【讨论】:

    【解决方案2】:

    这是您需要的逻辑,您可以根据具体用例对其进行调整。
    此外,您还需要添加所有其他详细信息,例如输入和输出。

    def foo(n: Int): List[Int] = {
      def listUntil(x: Int): List[Int] =
        List.range(start = 1, end = (x  + 1))
    
      listUntil(n).flatMap(listUntil)
    }
    

    【讨论】:

    • 其实我们的答案是一样的。因此删除了我的。
    【解决方案3】:

    如果我理解正确,对于输入 n=3,您期望输出 (1, 1, 2, 1, 2, 3),对于输入 n=4,您期望输出 (1, 1, 2, 1, 2、3、1、2、3、4)。

    如果是这样的话,就这么简单

    def f(n: Int) = for {
      i <- (1 to n)
      j <- (1 to i)
    } yield j
    

    我在菊石上试过这个并得到

    @ def f(n: Int) = for {
        i <- (1 to n)
        j <- (1 to i)
      } yield j
    defined function f
    
    @ f(3)
    res2: collection.immutable.IndexedSeq[Int] = Vector(1, 1, 2, 1, 2, 3)
    
    @ f(4)
    res3: collection.immutable.IndexedSeq[Int] = Vector(1, 1, 2, 1, 2, 3, 1, 2, 3, 4)
    

    【讨论】:

    • @Raj 对于理解也是在 scala 中处理此类问题的好方法。当您有许多嵌套地图和平面地图逻辑时,阅读起来会更清晰
    猜你喜欢
    • 2014-01-24
    • 2020-09-22
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2017-03-30
    相关资源
    最近更新 更多