2016-12-01 57 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