2010-03-02 9 views
7

홀수/짝수를 표시하는 더 쉬운 방법이 있는지 궁금합니다. for 루프를 수행하고 목록을로드 할 수 있음을 알고 있습니다.C# 정수를로드하고 홀수/홀수 표시

for(i=0; i<100; i++) 
if(myList[i]%2==0) //even 
    //do something 
else 
    //odd do something 

하지만 쉽게 홀수의 목록을 얻을 수있는 단지 있도록이를 단축 할 수있는 방법이있다 : 값이 짝수/홀수 인 경우 다음 나는 목록을 루프 루프 또 다른를 작성하고 확인할 수 있습니다 또는 심지어 숫자. 그냥 궁금해하는 숙제가 아닙니다.

답변

11

당신은 람다의 일종 사용할 수 있습니다

//load a list, t, with 100 integers 
List<int> t = Enumerable.Range(1, 100).ToList(); 

//find odd numbers 
var oddNumbers = t.Where(num => num%2 != 0); 

//find even numbers 
var evenNumbers = t.Where(num => num%2 == 0); 

//print odd numbers 
foreach (int i in oddNumbers) 
    Console.WriteLine(i); 

//print even numbers 
    foreach(int i in evenNumbers) 
     Console.WriteLine(i); 

열거 가능한 단지 1-100로 목록을로드 한 다음 단순히 모든 확률 /를 고르게 날치기 한 다음 인쇄 할 수 있습니다. 이 모두는 다음과 같이 단축 될 수 있습니다 :

var e = Enumerable.Range(1, 100).Where(num => num%2==0); //for even numbers 
var o = Enumerable.Range(1, 100).Where(num => num%2!=0); //for odd numbers 

, o는 암시 적 유형 var를가집니다.

List<int> o = eo.Where(num => num%2!=0).ToList(); 
List<int> e = eo.Where(num => num%2==0).ToList(); 

그리고 내 초기에 나열되어 인쇄하기 :

다음
List<int> eo = Enumerable.Range(1, 100).ToList(); //must tell it its a list 

이 가능성을 찾기 위해/목록 형에 직접 고르게 : 컴파일러는이 두 라인에 상응 그래서 유형을 확인할 수 있습니다 암호.

+1

이상한 숫자에 대한 당신의 술어에는 불쾌한 버그가 있습니다. 당신이 그것을 찾을 수 있는지보십시오. (힌트 : 더 많은 테스트 케이스가 필요하다.) –

+0

@Eric Lippert 아마도 num % 2 == 1은 나쁜 선택이었다 ... 2 == 1이 false를 반환하기 때문에 :). 편집 할 것입니다 ... 내가 실수인지 알려주세요. – JonH

+1

당신이 실제로 문제를 진단하지 않았기 때문에 좋은 생각, 올바른 수정,하지만 시가가 없습니다. -100에서 +100 사이의 범위로 원래 코드를 시도하십시오. –

15

LINQ 방법 ... 홀수 1과 100

var even = Enumerable.Range(1,100).Where(i => i % 2 == 0); 
var odd = Enumerable.Range(1,100).Where(i => i % 2 != 0); 
+0

i %를 대체하는 것이 더 빠릅니다. 2로 i & 1을 넣고 –

+2

Lonli-Lokli 그러나 그 다음에 무슨 일이 벌어지는 지 이해하려면 두 개의 헤드 스위치가 필요합니다. 이러한 가벼운 절약을 위해 해독 가능성이 더 중요합니다. – JonH

+0

@JonH 좋은 지적이지만, 사람들이 설명하는 한 공연적인 방식으로 사물을 써야한다고 생각합니다. 예 :'// i & 1 == 0은 i % 2 == 0보다 빠릅니다. –

3

당신은 단지 홀수 또는 짝수, 다음 과정 꺼내 LINQ를 사용할 수있는 사이에도 번호 :

var even = myList.Where(i => i%2==0); 
foreach(var number in even) 
    // do something 
0

을 다음 수식에 따라 목록을 채우십시오.

Odds[0->N] = 2*i+1 
Evens[0->N] = 2*i 
1

첫 번째 루프를 만들 필요가 없습니다. 당신은 할 수 :

for (i=1; i < 101; i++) 
{ 
    if (i % 2 != 0) 
    { 
     //do something 
    } 
} 

심지어 : 당신은 단지 숫자의 절반을해야하는 경우

for (i=1, i < 101, i+=2) 
{ 
    //do something 
} 
+0

문제는 홀수 또는 짝수 색인을 선택하는 것이 아니라 정수 목록의 홀수 또는 짝수 요소를 선택하는 것입니다. –

+0

@ Eric Lippert - 아, 알겠습니다. 감사. – davecoulter

0

, 그냥 반 번호 생성 (..; ...을, I = I + 2)

숫자가 모두 필요하지만 추가 루프가 발생하지 않도록하려면 초기 루프 중에 기호를 표시하거나 처리하면됩니다.

또는 생성하는 동안 모든 숫자에 대해 하나, 확률에 대해 하나, evens에 대해 세 번째 목록/배열을 만듭니다.

특정 애플리케이션이 있습니까?

+0

문제는 짝수 인덱스를 보는 것이 아니라 문제가 짝수 요소를 보는 것입니다. –

3
var t = Enumerable.Range(1, 100).ToList(); 
var oddNumbers = t.Where(n => (n & 1) != 0).ToList(); 
var evenNumbers = t.Where(n => (n & 1) == 0).ToList(); 
+0

12 upvotes 대답이 이미 2 년 전에 이것을 말할 때 이것은 유용합니다. – jv42

+0

일부 기능의 잠금을 해제하기 위해 노력하고 있으며 새로운/답이없는 질문을 시도하는 것으로 알고 있습니다. :) –