У меня есть 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 ответ
Ты можешь это сделать
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
List
на IList
, потому что тогда это будет работать для всех типов в вопросе, кроме IEnumerable
(который все равно никогда не сработает). Кроме того, вы сбросите ()
с Count()
.
passed as params
? не могли бы вы показать API?
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.