将 IEnumerable<int> 中的所有值相乘
Posted
技术标签:
【中文标题】将 IEnumerable<int> 中的所有值相乘【英文标题】:Multiplying all values in IEnumerable<int> 【发布时间】:2011-04-12 01:44:28 【问题描述】:我有以下代码,我正在尝试解决如何将 IEnumerable<int>
中的所有值相乘。
我认为可能有像 Sum 那样的 Multiply 方法。我想我可以对每个项目进行一次 foreach,但现在这似乎很乏味。
有什么建议吗?
//1:2:6
string[] pkgratio = comboBox1.SelectedRow.Cells["PkgRatio"].Value.ToString().Split(':');
var ints = pkgratio.Select(x => int.Parse(x));
int modvalue = ints....
【问题讨论】:
【参考方案1】:您正在寻找的是聚合函数
int modValue = ints.Aggregate(1, (x,y) => x * y);
Aggregate 函数接受一个初始累加器值,然后对枚举中的每个值应用一个操作,创建一个新的累加器值。这里我们从 1 开始,然后将 ever 值乘以累加器的当前值。
注意:如果 ints
值为空,则返回 1。这可能适合您的情况,也可能不适合您的情况。
【讨论】:
谢谢。我刚试过 ints.Aggregate(1, (x,y) => x + y);对于 1,2,6,它加起来是 10。我猜那是因为它从一开始就加了 1。但是乘法就可以了吗?? @Jon:是的。您也可以完全省略种子并执行ints.Aggregate((x,y) => x * y)
,但如果您为其提供一个空序列,则会引发异常。
我刚试过,即使种子在空序列上,它仍然会抛出异常
仅供参考,如果您使用的是浮点数而不是整数,您可能希望将“1”更改为“1.0”或将其转换为您的实际类型,否则您会得到编译器错误。事后看来似乎很明显,但我花了几分钟摸摸头绪,并认为我会分享这个以希望其他人不必这样做。
谢谢,正是我一直在寻找的!以上是关于将 IEnumerable<int> 中的所有值相乘的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中将 List<IEnumerable<int>> 转换为 List<int> [重复]
如何从客户端接收 IEnumerable<int>? [复制]
尝试在 C# 中迭代 IEnumerable<int> 时,指定的强制转换无效
具有键“XXX”的 ViewData 项属于“System.Int32”类型,但必须属于“IEnumerable<SelectListItem>”类型
具有键“CategoryId”的 ViewData 项的类型为“System.Int32”,但必须为“IEnumerable<SelectListItem>”类型?