Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 将列表的大小扩展N_List_Scala - Fatal编程技术网

List 将列表的大小扩展N

List 将列表的大小扩展N,list,scala,List,Scala,我对这个问题的措辞有困难,所以我为这个听起来含糊不清的标题道歉 我今天开始学习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中不起作用。您可以这样做: val l = List(1, 2, 3,

我对这个问题的措辞有困难,所以我为这个听起来含糊不清的标题道歉

我今天开始学习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中不起作用。

您可以这样做:

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

或者提供模拟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)

您的另一个选择是:

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

可能类似于
Range(0,2).toList.flatMap(x=>List(1,2,3,4))
类似,但不完全相同:注意,如果列表有点大,这种方法效率很低,因为这里的所有操作都是O(N),您可能需要首先将
List
转换为
ArraySeq
,你说得对:)
val l = List(1, 2, 3, 4)
val length = l.length
List.tabulate(length * n)(i => l(i % length))