2012-10-06 4 views
2

는이 같은 목표 C에서 간단한 검사 할 노력하고 있어요 : 달성하면서 내가 1if 수표를 달성하기 위해 노력하고 그러나반복 코드를 최소화 하시겠습니까?

if ((spriteA.tag == 4 && spriteB.tag == 10)) { 
} 

을 다음 : 이제

if ((spriteA.tag == 4 && spriteB.tag == 10,11,12,13,14,15,16,17)) { 
} 

내가 알고 || 연산자를 사용할 수 있지만 if은 많은 코드 행을 검사하여 읽을 수 없게됩니다. 이제 내가하려는 일을 성취하기위한 체계적인 방법이 있습니까?

감사합니다.

+6

'spriteA합니다. 태그 == 4 && spriteB.tag> = 10 && spriteB.tag <= 17'? –

+0

나는 더 많은 코드 라인 (NSSets 생성)을 사용하지 않기 때문에 @DanielFischer 메소드를 가장 좋아한다. (당신이 할 수 있을지 몰랐다.) –

+1

범위를 형성하는 허용 가능한 값에 묶여있다. 그것이 항상 사실이 아니라면, 세트가 될 것입니다. –

답변

1

가장 간단한 방법은 비트 마스크 int spriteBtags = (1 << 10) | (1 << 11) | (1 << 12) | ...;을 만든 다음 (1 << spriteB.tag) & spriteBtags으로 테스트하는 것입니다. 그러나이 방법은 spriteB.tag의 값을 int 또는 long의 비트 수로 제한합니다. 물론, spriteBtags을 작성하는 데는 긴 구술이 있지만 일회성 과제입니다.

파스칼과 같은 다른 언어는 비트 집합을 가지고 있기 때문에 이런 일을보다 간단하게합니다.

(당신은 적어도 가변 인자 함수를 작성하여 할당 문의 복잡성을 숨길 수 : int spriteBtags = createIntBitset(10,11,12,...17,-1);), 열거 같은 값으로

1

switch 문이 유용 할 수 있습니다 :

switch(spriteB.tag) { 
case 4: 
case 10: 
case 12: 
case 17: 
case 42: 
    ... 
    break; 
} 
관련 문제