【问题标题】:Multiplying list<int> with number in C# [duplicate]将列表<int>与C#中的数字相乘[重复]
【发布时间】:2021-12-08 17:22:20
【问题描述】:

在 C# 中,通过使用循环遍历项目,将整数列表与值相乘是唯一的方法吗? 我一直在寻找避免循环的方法,但没有运气。 我知道在 Python 中,例如您不必遍历列表来执行此操作,所以我想知道 C# 中是否还有任何方法可以实现以下目标:

  List<int> myList = new List<int>() { 1, 2, 3 };
  
  int mult = 5;

  foreach(int i in myList)
     mult = mult * i;

【问题讨论】:

  • 即使 Python 是循环的,它也可能不那么明显。
  • 你为什么要避免循环?即使 Python 没有让循环对你来说很明显,它仍然必须在内部循环才能实现你想要的。
  • 有 LINQ,它看起来不像你在使用循环结构,但在内部它是循环的。我自信地说,没有循环就无法实现这一目标。 myList.ForEach(i =&gt; mul *= i)。在性能方面也更糟。
  • @DavidG 当然我认为它仍然“在引擎盖下”循环,但我试图了解 C# 中是否也有类似的东西,从而避免编写任何循环

标签: c#


【解决方案1】:

您可以使用 LINQ 的 Aggregate 来执行此操作:

List<int> myList = new List<int>() { 1, 2, 3 };
int mult = myList.Aggregate(5, (cur, val) => cur * val);
Console.WriteLine(mult); // prints 30

但请注意,这仍然在内部使用循环。 Python 也会在内部使用一个列表,即使它对你来说并不明显。

【讨论】:

  • 对于 OP 的情况(List),我认为ForEach 可能写起来更简单。
  • @LukeVo 就个人而言,我更喜欢这个,但我同意.ForEach 也同样有效。
  • @LukeVo IMO ForEach 太糟糕了,我希望它永远不会被引入语言中。
  • @DavidG 你能详细说明一下吗?我认为它很棒而且有点咸,他们没有将它添加到 LINQ 中,只有 List&lt;T&gt;s 有它们。
  • @LukeVo Eric Lippert 在这里讨论了原因:ericlippert.com/2009/05/18/foreach-vs-foreach
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多