2011-08-17 3 views
-3

글쎄 그것은 바보 같은 질문이 될 수도 있지만 나는 대답을 찾을 수 없습니다 해요 :더블 또는 단일 스위치 것은

사건은 간단하다, 내가 항목에서 정수의 따라 할당하는 두 개의 변수와 기능이를 그. 문제는 변수에 할당 된 값이 특정 경우에 공통적이지만이 경우 두 변수에서 동일하지 않다는 것입니다. (충분히 명확하지 않은 경우 예제 참조).

그런 경우 가장 좋은 방법이 무엇인지 궁금합니다. 는 무엇인가인가 :

function test(a){ 
    var x,y; 
    switch (a){ 
     case 0: 
     case 1: 
     case 7: 
      y=...; 
      break; 
     case 2: 
     case 6: 
      y=...; 
      break; 
     case 3: 
     case 4: 
     case 5: 
      y=...; 
    } 
    switch(a){ 
     case 5: 
     case 6: 
     case 7: 
      x=...; 
      break; 
     case 0: 
     case 4: 
      x=...; 
      break; 
     case 1: 
     case 2: 
     case 3: 
      x=...; 
    } 
    ... 
} 

또는

function test(a){ 
    var x,y; 
    switch (a){ 
     case 0: 
      x=...; 
      y=...; 
      break;    
     case 1: 
      x=...; 
      y=...; 
      break; 
     case 2: 
      x=...; 
      y=...; 
      break; 
     case 3: 
      x=...; 
      y=...; 
      break; 
     case 4: 
      x=...; 
      y=...; 
      break; 
     case 5: 
      x=...; 
      y=...; 
      break; 
     case 6: 
      x=...; 
      y=...; 
      break; 
     case 7: 
      x=...; 
      y=...; 
    } 
    ... 
} 

또는 각각의 경우에 X에 할당 된 값이 둘의 조합을 사용하는와 y의 값 그룹을 만들기 위해?

8 개 이상의 값이있을 수 있음을 유의하십시오. 미리 감사드립니다.

답변

3

switch 문에서 서로 다른 케이스가 실제로 겹치지 않는다면 별개로 분리하는 것이 좋습니다.

조치간에 공통점이있는 경우 개별 case 블록 내의 특수한 경우와 결합 할 수 있지만 여기에는 해당하지 않는 것으로 보입니다. 이것은 당신이 값을 유지 할 수

//      index: 0 1 2 3 4 5 6 7 8 9 10 11 12 
static const int lookupX[] = { 2, 7, 1, 8, 2, 8, 1, 8, 2, 8, 4, 5, 9}; 
static const int lookupY[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9}; 
if ((a >=0) && (a < sizeof(lookupX)/sizeof(*lookupX))) 
    x = lookupX[a]; 
if ((a >=0) && (a < sizeof(lookupY)/sizeof(*lookupY))) 
    y = lookupY[a]; 

: 이것은 훨씬 더 복잡한 사건의 단순한 예를하지 않은 경우

그러나 같은 뭔가 더 컴팩트 한 솔루션을 달성 할 수있다 매우 작은 "구성"섹션에서 쉽게 의도를 볼 수 있습니다. 범위 검사와 조회는 매우 간단 해집니다.

이 코드는 C 언어에 맞춰져 있습니다. (var 문 때문에) 사용하고있는 특정 언어가 확실하지 않지만 기본적으로 색인 만 유효하면 조회 만하고 있습니다. 이 비트를 선택한 언어로 번역해야합니다.

+0

잘 질문은 특정 언어에 전념하지 않았습니다. 답변과 아이디어를 보내 주셔서 감사합니다. –