2014-02-13 2 views
0

배열에 대한 참조를 scala에서 작동하도록 전달하는 방법. 다음 예배열 참조를 scala의 함수에 전달합니다.

스칼라의 어레이 (REF)에 대한 C/C++

어떻게 작성하는 코드의 함수이다? 이 같은

int RMQUtil(int *st, int ss, int se, int qs, int qe, int index) 
{ 
// If segment of this node is a part of given range, then return the 
// min of the segment 
if (qs <= ss && qe >= se) 
    return st[index]; 

// If segment of this node is outside the given range 
if (se < qs || ss > qe) 
    return INT_MAX; 

// If a part of this segment overlaps with the given range 
int mid = getMid(ss, se); 
return minVal(RMQUtil(st, ss, mid, qs, qe, 2*index+1), 
       RMQUtil(st, mid+1, se, qs, qe, 2*index+2)); 
} 

답변

1

뭔가 작업을해야합니다 :

def RMQUtil(st: Array[Int], ss: Int, se: Int, qs: Int, qe: Int, index: Int): Int = { 
    if (qs <= ss && qe >= se) 
    return st(index) 
    if (se < qs || ss > qe) 
    return Int.MaxValue 

    val mid = getMid(ss, se) // I assume this is something like (ss + se)/2 
    Math.min(RMQUtil(st, ss, mid, qs, qe, 2*index+1), RMQUtil(st, mid+1, se, qs, qe, 2*index+2)) 
} 
+0

@ user2124441 제안 된 전자 메일에 대한 간단한 설명입니다. dit - 마지막 문장에'return' 키워드를 포함 할 필요가 없습니다. – serejja

3

을하는 방법의 여러 인수를위한 스칼라 위의 질문 방법에 대해 다시 코딩

case class Params(ss: Int, se: Int, qs: Int, qe: Int, index: Int) 

고려

def RMQUtil(st: Array[Int], p: Params): Int = { 
    if (p.qs <= p.ss && p.qe >= p.se) 
    st(index) 
    else if (p.se < p.qs || p.ss > p.qe) 
    Int.MaxValue 
    else { 
    val mid: Int = getMid(ss, se) 
    Math.min(RMQUtil(st, Params(p.ss, mid, p.qs, p.qe, 2*index+1)), 
       RMQUtil(st, Params(mid+1, p.se, p.qs, p.qe, 2*index+2))) 
    } 
} 
+1

'Params (p.ss, mid, p.qs, p.qe, 2 * index + 1)'는'p.copy (se = 중간, 인덱스 = 2 * 인덱스 + 1)'. 이 방법을 사용하면 변경 내용과 변경 내용을보다 쉽게 ​​파악할 수 있습니다. 이 방법으로 매개 변수를 전달하는 데 별 도움이되지 않습니다 (사례 클래스에서 래핑 됨). –

+0

@ om-nom-nom 좋은 관찰을 해줘서 고마워. 복사 방법을 이용하는 것 외에도별로 이득이 없다. – elm

관련 문제