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
相关产品推荐
相关产品推荐

