3

私は を持っておりdouble[]、私は別のものIEnumerable<double>と別のものを持ってList<double>ObservableCollection<double>ます。

これらにはすべて double 値が含まれています。

これらのコレクションのいずれかを引数として取り、コレクション内の各要素の値を比例させて 1 になるようにする関数を作成したいと考えています。

たとえば、配列に 0.5、1.0、および 0.5 がある場合、 を呼び出すことができますProportionateIt(mycollection)。合計が 1 になるため、値を 0.25、0.5、および 0.25 に変更する必要があります。

これまでのところ、私はこれを試しました:

    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(....) 関数を作成できますか?

4

1 に答える 1

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;
        }
    }

編集:小さな変更を加えました- @Rawlingが提案するように変更ListしますIList

于 2013-05-28T10:55:38.827 に答える