总和在列出一系列的整数的
比方说,我有一个这样的名单:总和在列出一系列的整数的
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等等......我所知道的只是前两项是字符串,其余都是整数。
在这种情况下,期望的结果是。
方法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));
很容易:
list.Skip(2).Select(int.Parse).Sum();
var sum = _lstr.Skip(2).Sum(s => int.Parse(s));
未做假设前两项是字符串
int sum = _lstr.Select(s => {int i; return int.TryParse(s,out i) ? i : 0; })
.Sum();
+1为无假设接近。假设经常是错误的 – 2013-04-30 19:56:31
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
,但在假num = 0的情况下,尝试在最后一个整数后面添加另一个字符串和另一个整数 – Steve 2013-04-30 19:56:29
道歉,它是out,所以它必须更改值 - 你确信它将它设置为0 ?我无法找到任何有关文件。 – VisualMelon 2013-04-30 19:58:15
@Steve我不是downvoter,但我个人不喜欢使用Linq的副作用。 – 2013-04-30 20:00:41
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;
你试过了什么?你有没有试图自己解决这个问题?你知道如何验证一个字符串是否可以被解析为一个整数? – Servy 2013-04-30 19:50:02