2016-12-01 5 views
0

스칼라에 정수 목록을 가지고 있습니다. 인터프리터/컴파일러는 경고를 표시하지 않지만 워크 시트를 실행할 때 오류가 발생합니다 "찾을 수 없음 : 값 테이블 "스칼라 목록 목록 인스턴스화

var mylist: List[List[Int]] 

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

은 내가 아는 나는 지능이 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

Ahh 감사합니다. 목록이 변경되지 않는다는 사실을 상기시켜야합니다. 나는 너무 유용한지도를 잊었다. 고맙습니다. 정말 멋진 우아한 솔루션입니다. – 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

고마워요! 둘 다 좋습니다. 스칼라 목록을 변경할 수 없다는 사실을 머리에 써야합니다. List 빌더 솔루션도 매우 훌륭합니다. 고맙습니다. – I2obiN