比例收集的价值

时间:2013-05-28 10:44:29

标签: c# .net

我有一个double[]我有另一个IEnumerable<double>和另一个List<double>以及ObservableCollection<double>

所有这些都包含一些双重值。

我想创建一个函数,它可以将这些集合中的任何一个作为参数,并且它将按比例集合中每个元素的值,以便它们添加到1。

例如 - 如果数组有0.5,1.0和0.5,那么我可以调用ProportionateIt(mycollection),它应该将值修改为0.25,0.5和0.25,因为现在它们总和为1。

到目前为止,我已经尝试过这个:

    private IEnumerable<double> ProportionateIt(IEnumerable<double> input)
    {
        double sum = 0;
        var newCollection = input.ToList();
        foreach (double d in newCollection)
        {
            sum+= d;
        }

        for (int i=0; i < input.Count(); i++)
        {
            newCollection[i] = newCollection[i]*(1/sum);
        }

        input = newCollection as IEnumerable<double>;
        return input;
    }

有一些问题

  • 它不会将我在上面陈述的所有类型都作为参数。
  • 它返回一个新集合,而不是修改原始集合。

有人可以为我创建一个ProportionateIt(....)函数吗?

1 个答案:

答案 0 :(得分:4)

你可以这样做

    private static void ProportionateIt(IList<double> input)
    {
        double sum = input.Sum(d => d);

        for (int i = 0; i < input.Count; i++)
        {
            input[i] = input[i] / sum;
        }
    }

修改做了一些小改动 - 将List更改为IList,因为@Rawling建议