我有一个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(....)函数吗?
答案 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建议