2013-04-09 8 views
2

다차원 배열의 모든 값을 변경하고 싶지만 "val에 대한 재 할당"오류가 발생합니다.배열의 각 값을 어떻게 수정할 수 있습니까?

스칼라 코드 :

var cal = Array.ofDim[Double](300, 10000000); 
cal.foreach(x => { 
    x.foreach({o => o = 5.1} //here it'll be more complicated code 
)}); 

는 몸이 배열의 값을 할당하는 방법을 알고 있습니까?

감사

답변

9

transformmutable sequences에 일괄 수정이 있습니다.

for (y <- 0 until cal.length) { 
    cal(y).transform(x => 5.1) 
} 

는 또한 수행 할 수 있습니다

for (y <- 0 until cal.length) { 
    val row = cal(y) 
    for (x <- 0 until row.length) { 
    row(x) = 5.1 
    } 
} 
+0

여기서 'n'은'cal'의 크기이고'm'은 각 행의 크기이고 쉼표는 곱셈입니까? 당연하지. – axel22

+0

감사합니다. zipWithIndex.transform을 사용해야 변환 배열의 인덱스를 사용해야합니까? – orim

+0

아니요, 그것은 요소와 그 인덱스 인'Array [(T, Int)]'쌍의 새로운 배열을 만들 것입니다. 더 나쁜 것은 중간 배열이 업데이트 될 것입니다. 대신 범위에 대해 중첩 된 for 루프를 사용해야합니다. – axel22

1

나는 이것이 가장 좋은 방법인지 잘 모르겠습니다 만 작동 :

val cal = Array.ofDim[Double](300, 10000000) 
    (0 until cal.length).foreach(rowIndex => { 
    val row = cal(rowIndex) 
    (0 until row.length).foreach(colIndex => { 
     row(colIndex) = 5.1 //here it'll be more complicated code 
    }) 
    }) 

당신이있어 오류의 원인은 당신이 불변 함수에 값을 할당하려고하는 것입니다 매개 변수 oo => o = 5.1입니다.

1

당신이 var를 사용하기 때문에 할 수 있습니다 단순히

var cal = Array.ofDim[Double](300, 10000000); 
cal = cal.map{ 
    a=>a.map{ 
    o=> 1.5 \\complex calculations 
    } 
} 

NB :이 관용적 스칼라 또는 기능은 아니지만, 그것을 작동합니다.

관련 문제