2011-04-23 4 views
0

나는 2와 10으로 나눌 수있는 값을 대체해야하고 dTwo와 2로 나눌 수있는 모든 것을 dTen과 10으로 대체해야하는 목록 컬렉션을 개선하려고합니다.숫자로 바꾸는 목록 컬렉션

내 코드는 하나의 나눌 수있는 문장으로 작동하지만 두 개는 작동하지 않습니다.

 var num = new List<string>(); 

     for (int n = 0; n < 101; n++) 
     { 
      num.Add(n % 2 == 0 ? "dTwo" : n.ToString()); 
      num.Add(n % 10 == 0 ? "dTen" : n.ToString()); 
     } 
+0

그 코드에 무슨 문제가 있습니까? 두 항목으로 나눌 수있는 항목, 즉 20을 모두 추가하지 않겠습니까? – Ben

답변

1

(10)로 나누어 임의의 숫자는 당신이 또한 문을 전환하고 10로 나눌 수있는 경우 다음 번호를 계속해야 2로 나누어 이후 :

var num = new List<string>(); 

    for (int n = 0; n < 101; n++) 
    { 
     if(n % 10 == 0) 
     { 
      num.Add("dTen"); 
     } 
     else num.Add(n % 2 == 0 ? "dTwo" : n.ToString()); 
    } 
+0

내가 잘못하지 않으면'n % 2' 테스트를 수행하지 않습니다. 'continue'는 샘플에서 무조건 실행됩니다. –

+0

아마도이 질문에 대해 오해했을 것입니다.하지만 그것은 항상 2로 나눌 수있는 수표를 무시할 것입니다. 그렇지 않습니까? – Ben

+0

@yea 편집 중간에 그걸 보았습니다! – BrokenGlass

1

만약 내가 루프를 사용하여 실제 루프의 정의 된 구조, 즉 밖으로 사용하지 않도록 할 수 있습니다. 가능한 경우 continue을 사용하지 않는 것을 선호합니다. goto 문과 같은 느낌입니다. 이 경우 간단하고 간단하면서도 읽기 쉽고 유지하기 쉬우면서도 간단한 접근 방법을 택할 것입니다.

당신은

var num = new List<string>(); 
for (int n = 0; n < 101; ++n) 
{ 
    if (n % 10 == 0) 
    { 
    num.Add("dTen"); 
    } 
    else if (n % 2 == 0) 
    { 
    num.Add("dTwo"); 
    } 
    else 
    { 
    num.Add(n.ToString()); 
    } 
} 
+0

+1 당신 말이 맞아, 내가 무슨 생각을했는지 모르겠다 ;-) 이것은 받아 들여진 대답이어야한다. – BrokenGlass

+0

Nitpick,하지만 10으로 나눌 수 있습니까? ;) –

0

내가 여기 걸릴 것 두 가지 접근 방법이있다 필요한 경우 문이 경우, 우선 순위를 변경하는 경우 n % 10이있다/다른 경우 우선 순위를 전환 할 수 있습니다, 첫 번째 장황 하지만 당신은 아주 읽을 수있는 방식으로 뭘 하려는지 전달 :

var num = new List<string>(101); 
for (int i = 0; i < 101 ; i++) 
{ 
    if (i == 0) 
    { 
     num.Add(i.ToString()); 
    } 
    else if (i % 10 == 0) 
    { 
     num.Add("dTen"); 
    } 
    else if (i % 2 == 0) 
    { 
     num.Add("dTwo"); 
    } 
    else 
    { 
     num.Add(i.ToString()); 
    } 
} 

두 번째는 다음과 같이 더 간결 LINQ-Y 형 접근 방식을 사용합니다. 나는 또한 계정으로 0, 그렇지 않으면 당신은 갈 어느 10

로 나누어 것으로보고받을 것이다 0 가장자리 케이스를 촬영했습니다

var num = Enumerable.Range(0, 101) 
    .Select(
     n => n == 0 ? n.ToString() : 
     n % 10 == 0 ? "dTen" : 
     n % 2 == 0 ? "dTwo" : 
     n.ToString()) 
    .ToList(); 

참고 크게 취향에 달려있다. 개인적으로는 후자의 구현을 위해 간결하지만 여전히 코드의 의도를 전달하므로 간다. 필자가 한 초보적인 테스트에서 더 빠르게 실행된다는 것을 보여줍니다.

관련 문제