2016-12-01 6 views
0

ワークシートを実行するときにインタープリタ/コンパイラが警告をスローしないうちに、Scalaに整数リストのリストがあります "エラーが見つかりません:値テーブル」Scalaでリストのリストをインスタンス化する

var mylist: List[List[Int]] 

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

は、私の知る限りでは、私はINTが、nextIntがintを返しますで、数量はintの所定のリストです。

私はテーブル変数をインスタンス化する必要があると思いますが、どうすればよいですか?

+0

例を再現可能にするには、 'quantity'関数定義を含めることができますか? – Odomontois

答えて

2

不変のコレクションを保持するvarと、可変コレクションを保持するvalの違いがあります。前者(var)は後で別のコレクションを保持できます。後者(val)は指定されたコレクションのみを保持できますが、そのコレクションの内容は時間の経過とともに変更される可能性があります。

mylistvarであっても、List[List[Int]]は不変です。その内容は変更できません。

コレクションを作成するには、このようなものを試してみてください。

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

ああありがとう、私は自分がリストが不変であることを思い出させる必要があります。私はマップがどれほど有用かを忘れてしまった。ありがとう、それは本当に素晴らしいエレガントなソリューションです。 – I2obiN

2

@jwvhはList秒述べたように、要素計算によってあなたのリストの代わりの要素を計算するために、完全な式を含める必要がありますので、不変である

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 Listsが不変であるということを頭の中に打ち込む必要があります。リストビルダーのソリューションも非常にいいです。ありがとうございました。 – I2obiN

関連する問題