2014-05-16 2 views
-2

나는 얼마 전에 질문을했습니다. ->how to count conditioned continuous values in a list with linq?linq를 사용하여 목록에서 조건부 연속 값을 계산하는 방법은 무엇입니까? (Revized)

이 질문에 대한 답변이 @Fung입니다. 그러나 나는이 질문의 몇 가지 규칙을 변경했다. 새로운 조건 :

var query = Enumerable.Range(0, 1440).Select((n, index) => 
    { 
     if ((index >= 480 && index <= 749) || (index >= 810 && index <= 999) || (index >= 1080 && index <= 1099) || (index>=1200 && index <= 1299)) 
      return 0; 
     else if ((index >= 750 && index <= 809) || (index >= 1100 && index <= 1199)) 
      return 1; 
     else 
      return 2; 
    }); 

그래서, 나는 얼마나 많은 인덱스 지속적으로 "0"값을 가지고 자신의 인덱스있는 찾을 수

- 경우에도 "1"(안 2)에 의해 인터럽트 -? 예를 들어; 이전의 값은 "2"이기 때문에

query[480]=query[481]=query[482]....query[749] = 0, 
query[750]=query[751]...query[809] = 1, 
query[810]=query[811]....query[999] = 0, 
query[1000]?query[1001]...query[1079] = 2, 
query[1080]=query[1081]....query[1099] = 0, 
query[1100]=query[1101]....query[1199] = 1, 
query[1200]=query[1201]....query[1299] = 0, etc.. 

그래서, 응답은 고려되지 않으며, (1 이후) 270 (전 1) + 190 = 인덱스가 0이 1,080 내지 1,099 비록 460 이다.

또한 1080-1099 및 1200-1299의 값은 새로운 0-1000 세리에가 있기 때문에 고려해야합니다. 그리고,이 세리에는 또 다른 목록을 받아야합니다. 이것을 달성 할 수있는 방법이 있습니까?

내가 이제 이러한 결과를했습니다 : "2"로 나눈 그 때문에, enter image description here

, 나는 그들을 다른 목록에서 원하는 : enter image description here

답변

1
public class ListStuff 
{ 
    public int Count { get; set; } 
    public int Start { get; set; } 
    public int End { get; set; } 
    public int LType { get; set; } 
    public int Group { get; set; } 
} 


var query = Enumerable.Range(0, 1440).Select((n, index) => 
      { 
       if ((index >= 480 && index <= 749) || (index >= 810 && index <= 999) || (index >= 1080 && index <= 1099) || (index >= 1200 && index <= 1299)) 
        return 0; 
       else if ((index >= 750 && index <= 809) || (index >= 1100 && index <= 1199)) 
        return 1; 
       else 
        return 2; 
      }); 


     int typeCount = 0; 
     int groupCount = 0; 
     var result = query 
       .Select((x, i) => new 
       { 
        Value = x, 
        Index = i, 
        Group = (((i == 0 || (query.ElementAt(i - 1) == 2)) && x != 2) ? ++groupCount : groupCount) 
       }) 
       .GroupBy(x => 
        x.Index == 0 || x.Value != query.ElementAt(x.Index - 1) 
         ? ++typeCount 
         : typeCount) 
       .Select(x => new ListStuff() 
       { 
        Count = x.Count(), 
        Start = x.First().Index, 
        End = x.Last().Index, 
        LType = x.First().Value, 
        Group = x.First().Group 
       }) 
       .Where(x => x.LType == 0 || x.LType == 1) 
       .GroupBy(x => x.Group) 
       .ToList(); 
+0

불행하게도, 그것은 아닙니다. – 1teamsah

+0

및 문제가 무엇입니까? 모든 그룹이 표시됩니다 ... –

+0

나는 그것을 그룹으로 만들고 목록으로 분리하기 위해 편집했습니다. –

관련 문제