【问题标题】:Expand the size of a List by N将列表的大小扩大 N
【发布时间】:2021-08-17 22:46:17
【问题描述】:

我在表达这个问题时遇到困难,所以我为这个含糊不清的标题道歉。

我今天开始学习 Scala。我想生成一个元素列表,然后将该列表乘以因子 N,结果如下:

List(1, 2, 3, 4) * N -> List(1, 2, 3, 4, 1, 2, 3, 4) (where N = 2)

在 Python 中,我只需执行以下操作即可获得所需的内容:

my_list = [1, 2, 3, 4] * 2 

但是,这在 Scala 中不起作用。

【问题讨论】:

标签: list scala


【解决方案1】:

试试List.fill

List.fill(2)(List(1, 2, 3, 4)).flatten
// : List[Int] = List(1, 2, 3, 4, 1, 2, 3, 4)

或提供模拟Python的扩展方法,例如

extension (l: List[Int]) 
  def *(n: Int): List[Int] = List.fill(n)(l).flatten

List(1, 2, 3, 4) * 2
// : List[Int] = List(1, 2, 3, 4, 1, 2, 3, 4)

【讨论】:

    【解决方案2】:

    你可以这样做:

    val l = List(1, 2, 3, 4)
    val n = 2
    val result = (1 to n)
      .flatMap(_ => l)
      .toList
    

    【讨论】:

      【解决方案3】:

      您的另一个选择是:

      val l = List(1, 2, 3, 4)
      val length = l.length
      List.tabulate(length * n)(i => l(i % length))
      

      【讨论】:

      • 请注意,如果列表有点大,这种方法效率很低,因为这里的所有操作都是 O(N),您可能需要将 List 转换为ArraySeq 首先。
      • 是的@LuisMiguelMejíaSuárez,你是对的 :)
      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多