我有一个
我想创建一个函数,可以将这些集合中的任何一个作为参数,并将每个元素的值按比例调整,使它们相加和为1。
例如,如果数组包含0.5、1.0和0.5,则我可以调用
到目前为止,我尝试过以下方法:
double[]
,还有一个 IEnumerable<double>
,以及一个 List<double>
和一个 ObservableCollection<double>
,他们都包含一些 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(....)函数吗?