2013-04-30 38 views
2

比方說,我有一個這樣的名單:總和在列出一系列的整數的

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 2013-04-30 19:50:02

回答

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(); 
1
var sum = _lstr.Skip(2).Sum(s => int.Parse(s)); 
4

未做假設前兩項是字符串

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

+1爲無假設接近。假設經常是錯誤的 – 2013-04-30 19:56:31

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 2013-04-30 19:56:29

+0

道歉,它是out,所以它必須更改值 - 你確信它將它設置爲0 ?我無法找到任何有關文件。 – VisualMelon 2013-04-30 19:58:15

+0

@Steve我不是downvoter,但我個人不喜歡使用Linq的副作用。 – 2013-04-30 20:00:41

-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 2013-04-30 20:11:50

+0

你看到編輯答案之前downvoting我 – Alok 2013-04-30 20:12:31

+0

是的。仍然不起作用。 – Servy 2013-04-30 20:12:48