You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中如何将List按倍数N重复扩展

Scala实现列表重复扩展的几种方法

嘿,刚上手Scala是吧?我当初从Python转过来的时候,也纳闷为啥myList * N这种顺手的写法不好使,给你分享几个能实现需求的实用方案:

  • 方法一:用List.fill配合flatten
    这是最直观的写法之一,先创建N个原列表的副本,再把嵌套的列表展平成一个单层列表:

    val myList = List(1, 2, 3, 4)
    val N = 2
    val extendedList = List.fill(N)(myList).flatten
    // 结果: List(1, 2, 3, 4, 1, 2, 3, 4)
    

    List.fill(N)(myList)会生成List(List(1,2,3,4), List(1,2,3,4)),再用flatten把嵌套结构拆掉。

  • 方法二:用Iterable.continually生成重复序列
    这种方式适合需要懒加载的场景,先不断生成原列表的迭代器,取前N个元素后展平转成List:

    val myList = List(1, 2, 3, 4)
    val N = 2
    val extendedList = Iterable.continually(myList).take(N).flatten.toList
    
  • 方法三:自定义扩展运算符(可选)
    如果想复刻Python里*的写法,可以给List扩展一个*方法,以后就能像Python那样用了:

    implicit class ListOps[A](list: List[A]) {
      def *(n: Int): List[A] = List.fill(n)(list).flatten
    }
    
    // 调用方式和Python一模一样
    val myList = List(1, 2, 3, 4)
    val extendedList = myList * 2
    

    不过这个需要定义隐式类,适合经常需要这个操作的场景。

简单总结下:Scala没有默认给List重载*来实现重复扩展,但通过上面几种方法都能轻松实现你要的效果~

内容的提问来源于stack exchange,提问作者Cov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:22:34