2009-10-07 3 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

Я думаю, что Рекс думал о конкатенации строк, поскольку самый внутренний список - это список строк, и что он отреагировал на оператор + =, который очень сильно масштабируется при использовании в строках в цикле. – 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)); 
Смежные вопросы