2013-04-30 3 views
2

Скажем, у меня есть список, как это:Sum диапазон Интс в списке

List<string> _lstr = new List<string>(); 

     _lstr.Add("AA"); 
     _lstr.Add("BB"); 
     _lstr.Add("1"); 
     _lstr.Add("7"); 
     _lstr.Add("2"); 
     _lstr.Add("5"); 

Как просуммировать целые числа в списке, если я не знаю, сколько целые числа в списке ? Может быть 4, может быть 10 и т. Д. Все, что я знаю, это то, что первые два элемента - это строки, остальные - целые числа.

В этом случае желаемый результат: .

+0

Что вы пробовали? Вы предпринимали какие-либо попытки самостоятельно решить эту проблему? Вы знаете, как проверить правильность синтаксического анализа целых чисел? – Servy

ответ

5

Метод A Безоговорочно пропускает первый 2 и принимает остальные все целые строки:

var sum = _lstr.Skip(2).Select(int.Parse).Sum(); 

Метод B не делает никаких assumtions:

var sum = _lstr.Aggregate(0, (x, z) => x + (int.TryParse(z, out x) ? x : 0)); 
1

Очень легко:

list.Skip(2).Select(int.Parse).Sum(); 
4

без предположения, что первые два элемента строки

int sum = _lstr.Select(s => {int i; return int.TryParse(s,out i) ? i : 0; }) 
       .Sum(); 
+1

+1 для не-допущений. Предположения часто ошибочны –

1
int num = 0; int sum = 0; 
_lstr.ForEach(x => {Int32.TryParse(x, out num); sum +=num;}); 

Просто, чтобы доказать точку, что если Int32.TryParse выходит из строя из ВДП сбрасывается в ноль

_lstr.Add("AA"); 
_lstr.Add("BB"); 
_lstr.Add("1"); 
_lstr.Add("7"); 
_lstr.Add("2"); 
_lstr.Add("5"); 
_lstr.Add("CC"); 
_lstr.Add("9"); 

int num = 0; int sum = 0; 
foreach(string s in _lstr) 
{ 
    bool result = Int32.TryParse(s, out num); 
    Console.WriteLine("TryParse:" + result + " num=" + num); 
} 

TryParse:False num=0 
TryParse:False num=0 
TryParse:True num=1 
TryParse:True num=7 
TryParse:True num=2 
TryParse:True num=5 
TryParse:False num=0 
TryParse:True num=9 
+0

, но в случае ложного num = 0 попробуйте добавить еще одну строку и другое целое число после последнего целого числа – Steve

+0

Извините, это 'out', поэтому он должен изменить значение - вы уверены, что он устанавливает его в 0 ? Я не могу найти документацию на этот счет. – VisualMelon

+0

@Steve Я не являюсь нисходящим, но мне лично не нравится использование Linq с побочными эффектами. –

-5
int sum=0,i=0;  
foreach(string s in mylist){ 
    //in case of non integers 
    try{ 
     i=int.parse(s);//you can put convert or tryparse too here 
    } catch(Exception ex) { 
     i=0; 
    } 
    sum=sum+i; 
} 

return sum; 
+0

Потому что он не работает. OP имеет список строк, не все из которых являются целыми числами. – Servy

+0

Вы видели отредактированный ответ до того, как меня опрокинули – Alok

+0

Да. Все еще не работает. – Servy

Смежные вопросы