2009-10-07 4 views
1

LINQ를 사용하여 목록의 목록 요소를 계산하는 방법은 무엇입니까?

다음 목록을 상상해보십시오 :

List<List<List<String>>> listRoot = new List<List<List<String>>>(); 

첫 번째 및 두 번째 목록 요소를 계산하고 누적 된 값을 반환 할 :

 int iFirstListCounter = 0; 
    int iSecondListCounter = 0; 

    foreach (List<List<String>> listFirst in listRoot) 
    { 

     iFirstListCounter += listFirst.Count; 

     foreach (List<String> listSecond in listFirst) 
     { 

      iSecondListCounter += listSecond.Count; 

     } 

    } 

    return iFirstListCounter + iSecondListCounter; 

LINQ를 사용하여이 작업을 수행 할 수 있는지 궁금합니다. ?

+0

@Rex 당신은 미쳤어? –

+0

Rex는 문자열을 연결하는 방법에 대해 생각하고있었습니다. 가장 안쪽에있는 목록은 문자열 목록이므로 루프의 문자열에 사용될 때 + = 연산자에 반응합니다. – Guffa

+0

그래, 그게 무슨 일이야. 죄송합니다 :) –

답변

3
int iTotalListCounter = listRoot.Sum(x => (x.Count + x.Sum(y => y.Count))); 
+0

원래 포스터는 두 개의 값을 요구했습니다. 당신은 그들 중 하나만 공급하고 있습니다. –

+0

@ 에릭, 나는 그가 단지 총액을 요구했다고 생각한다. 더 좋은 질문은 그것이 내 것과 동일 할 때 이것이 왜 받아 들여진 대답 이었는가하는 것입니다. ;) –

+1

아, 무슨 뜻인지 알 겠어. 이것은 혼란스럽게 말로 표현되는 질문이며, 합계가 왜 중요한지는 분명하지 않습니다. 그것은 합산하는 것이 이상한 것처럼 보입니다. –

4
listRoot.SelectMany(l => l.SelectMany(li => li)).Count() 
+0

허용 된 답변보다 확실히 좋습니다. –

+0

조엘.이 대답이나 받아 들여진 대답이 모두 "더 나은"진술 된 문제에 정확하게 답하지 않았기 때문에 학문적 인 것처럼 보입니다. :) –

+0

읽기 쉽지만. –

4
int totalCount = listRoot.Sum(x => x.Count + x.Sum(y => y.Count)); 
4

이 그것을 수행해야합니다

int firstListCounter = listRoot.Sum(f => f.Count); 
int secondListCount = listRoot.Sum(f => f.Sum(s => s.Count)); 
관련 문제