【问题标题】:Is that possible to divide all elements in C# double list to that double list elements sum (which makes total = 1)是否可以将 C# 双列表中的所有元素除以该双列表元素总和(这使得总计 = 1)
【发布时间】:2012-04-04 23:55:24
【问题描述】:

想象一个像下面这样的双重列表

List<double> lstDouble=new List<double>{4,6,2,7,1,1};

所以我想要的是将此列表中的所有元素除以元素的总和(21)。

所以列表划分后变为:

lstDouble = {4/21,6/21,2/21,7/21,1/21,1/21}

这意味着元素的新总和 = 1

我可以通过迭代等方式做到这一点,但我想知道自 Matlab 以来是否有任何捷径。我的助理教授一直告诉我学习 Matlab 并使用它,但我不想 :D 我喜欢 C#

谢谢。

C# 4.0 WPF 应用程序

【问题讨论】:

  • 请注意,之后的总和将大约为 1,而不是完全为 1。根据值的不同,近似值可能非常糟糕。
  • 这不是很重要,但它会接近 1。
  • 是要修改输入数组,还是要返回一个新的、修改后的数组?
  • 我处理了 lstTempDouble = lstTempDouble.Select(x => x / sum).ToList();

标签: c# list elements divide


【解决方案1】:
var sum = lstDouble.Sum();
var result = lstDouble.Select(d => d / sum);

【讨论】:

    【解决方案2】:

    你可以用 LINQ 做到这一点:

    var sum = lstDouble.Sum();
    var newLst = lstDouble.Select( x => x/sum );
    

    【讨论】:

      【解决方案3】:

      使用 lambda 表达式:

       lstDouble.ForEach(x => x = x/21);
      

      【讨论】:

      • 21 是一个变量数,取决于数组的大小和值。
      【解决方案4】:
      var sum = lstDouble.Sum();
      var result = lstDouble.Select(v => v / sum);
      

      【讨论】:

      • @CodeInChaos 是的,我刚发帖就想到了。已更正。现在我的答案和这里的其他人一样:-)
      【解决方案5】:

      这是一个伪代码:

      double sum = 0;
      for(int i=0; i<array.length; i++)
         sum+=array[i];
      for(int i=0; i<array.length; i++)
         array[i]=array[i]/sum;
      

      【讨论】:

      • 反对票应该意味着代码不起作用。那么为什么投反对票呢?
      • 即使这样也不值得投反对票。海报可以从那里弄清楚。
      • downvote 意味着答案是“没用”。问题指出“我可以通过迭代来做到这一点”,这就是这个答案正在做的事情,这使得这个答案在问题的上下文中没有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多