2016-12-01 59 views
0

当我去运行工作表时,我有一个Scala中整数列表的列表,而解释器/编译器没有抛出任何警告,我得到一个错误“not found:值表”在Scala中实例化一个列表的列表

var mylist: List[List[Int]] 

for (i <- 1 to 10) { 
mylist = List(List(i, Random.nextInt(20000), quantity(i))) 
} 

据我所知,i是一个Int,nextInt将返回一个Int,和数量是整数的预定列表。

我猜我需要实例化表变量,我应该怎么做呢?

+0

您是否可以包含'quantity'函数定义以使该示例具有可重现性? – Odomontois

回答

2

持有不可变集合的var和持有可变集合的val之间有区别。前者(var)稍后可以保存不同的集合。后者(val)只能保存一个给定的集合,但该集合的内容会随时间而改变。

即使mylistvarList[List[Int]]是不可变的。你不能修改它的内容。

要创建你想要的集合,你可以尝试这样的事情。

val mylist = (1 to 10).map(x => List(x, Random.nextInt(2000), quantity(x))).toList 
+0

啊,谢谢,我需要不断提醒自己,列表是不可改变的。我忘记了太多有用的地图。谢谢,这是一个非常好的优雅解决方案。 – I2obiN

2

由于@jwvh提到List s为不可变的,所以你应该包括全配方由元计算

import scala.util.Random 

val quantity = List(1,2,4,8,16) 
val myList = for { 
    q ← quantity 
} yield List.fill(q)(Random.nextInt(20000)) 

来计算你的列表,而不是元素如果你真的很喜欢势在必行的办法,你可以使用可变建设者创建您的收藏

import scala.collection.mutable.ListBuffer 
import scala.util.Random 

val quantity = List(1,2,4,8,16,32) 
val myListBuffer = ListBuffer.empty[List[Int]] 
for (i ← 0 until 6) 
    myListBuffer += List.fill(quantity(i))(Random.nextInt(20000)) 
val myList = myListBuffer.toList 
+0

谢谢!两者都很棒。我需要把它打入我的脑海,Scala列表是不可变的。列表生成器解决方案也非常好。谢谢。 – I2obiN