2012-05-07 3 views
0

저는 열거 형 범위가 있습니다. 처음에 범위와 관련이있는 것은 저장된 목록을 반복하고 minStop (최소 중지 지점) 및 maxStart (최대 tarting pint)를 얻었습니다.하지만 내 열거 가능한 범위 내에서 최소 범위와 최대 범위 만 가져오고 필요한 값을 제공하지 않습니다. 내가 뭘 잘못하고 있는지 알아낼 수있게 도와주세요. 부디! 첫 번째 등급의 설정 : 40 ~ 50, 내 분 정지 값이, 다음의 내 다음 세트를 얻을 수 (50) 일 것입니다 Enumerable Range가 제대로 작동하지 않습니다

List<Grades> ranges = new List <Grades>(); 
var strGrades = "40-50, 55-62, 65-72, 80-82, 85-92, 95-99, 110-115"; 
var splitGrades = strGrades.Split(char.Parse(",")); 
foreach(var item in splitGrades) 
{ 
    var splitAgain = items.Split(char.Parse("-")); 
    var myMax = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 
    var myMin = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 

    //my enumerable list 
    var erange = Enumerable.Range(int.Parse(myMax), int.Parse(myMax)).ToList() 
    foreach (var maxrange in erange) 
    { 
     for (int q = myMin; q < maxrange; q++) 
     { 
     //custom extension method for Between 
     if (!q.Between((myMin), (myMax), true)) 
     { 
      //Public class Grades{public int Start, get; set }     
      ranges.Add(new Grades() 
      { 
       Start= q, 
      }); 
     } 
     } 
    }   
    } 
return ranges; 
} 

사람은 예를 들어 (내 minStop 값을 얻기 위해 내 열거 범위를 얻는 방법을 나에게 보여 주시겠습니까 55-62 학년의 경우, 나의 최대 시작 값은 55가 될 것이므로 50-55의 범위를 얻으려고합니다. 각 세트의 마지막 값과 그 이후의 세트의 초기 값이 필요합니다. 분명. 어떤 도움을 주시면 감사하겠습니다! 감사합니다

+1

가 혹시 MSDN/다큐를 읽고해야해야 하는가? –

+1

'char.Parse (",")'? char 리터럴 대신'','',''-''를 쓰면 어떨까요? – Oded

+0

범위는 최대에서 최대까지입니다. – asawyer

답변

6

당신이 두 번째 aparameter이 카운트, 그리고 최대 인 것을 볼 수 있습니다 Enumerable.Range의 문서를 검색합니다.

public static IEnumerable<int> Range(int start, int count) 

따라서 최대 값을 포함하여 두 번째 매개 변수로 max - min + 1을 전달해야합니다.

또한 최소값을 최대 값이 아닌 첫 번째 매개 변수로 전달해야합니다.

또 다른 버그는 myMin을 최소값이 아니라 최대 값으로 계산한다는 것입니다. 모든

+0

min을 최소 한도로 어떻게 계산합니까? 내 코드에서 어떻게해야합니까? – Naina

+0

'var myMin = Math.Max ​​(...'이 수식에서 'Max'라는 단어를 'Min'이라는 단어로 대체 할 수 있습니다 .... – CodesInChaos

+0

고마워, 나는 그것을보고 작동하도록했다. – Naina

1

첫째는

var myMin = Math.Min(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 

Enumerable.Range(int.Parse(myMax),int.Parse(myMax)) 

이것은 N에서 시작하여 n 개의 길이를 가지는 열거 할 것이다 있어야한다 Min 찾을 수 있습니다.

Enumerable.Range(int.Parse(myMax), int.Parse(myMax) - int.Parse(myMin) + 1) 

귀하의 코드가

List<Grades> ranges = new List <Grades>(); 
var strGrades = "40-50, 55-62, 65-72, 80-82, 85-92, 95-99, 110-115"; 
var splitGrades = strGrades.Split(char.Parse(",")); 
foreach(var item in splitGrades) 
{ 
    var splitAgain = items.Split(char.Parse("-")); 
    int myMax = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 
    int myMin = Math.Min(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 

    //my enumerable list 
    var erange = Enumerable.Range(myMax, myMax - myMin + 1).ToList() 
    foreach (var maxrange in erange) 
    { 
     for (int q = myMin; q < maxrange; q++) 
     { 
     //custom extension method for Between 
     if (!q.Between((myMin), (myMax), true)) 
     { 
      //Public class Grades{public int Start, get; set }     
      ranges.Add(new Grades() 
      { 
       Start= q, 
      }); 
     } 
     } 
    }   
    } 
return ranges; 
} 
관련 문제