1

float 型の 2 つのベクトルがあります (ここでは簡略化するために、ベクトルの長さを 3 項目にしています)。

float[] a = new float[] { 10.0f, 20.0f, 30.0f };
float[] b = new float[] { 5.0f, 10.0f, 20.0f };

ペアごとに a から b を減算し、2 つのベクトル (結果と残りの数量) を保持する必要があります。結果は ab に対応し、残りの数量は a から減算できない数量に対応します (例 2 を参照)。

例 1:

  a   |  b  | Result | Remaining quantity (quantity that cannot be substracted from a)
                                          (b remainder)
------------------------------------------------
10.0f   5.0f   5.0f      0f
20.0f  10.0f  10.0f      0f
30.0f  20.0f  10.0f      0f

上記の例では、b の数量は常に a の数量以下であるため、残りの数量は常に 0 ですが、b の数量が a の数量よりも大きい場合、最大で a の数量のみを差し引いて、残りの数量を差し引くことができます。 b は、a から減算できなかった残りの部分である必要があります。たとえば、次のシナリオを想像してください。

例 2:

float[] a = new float[] { 10.0f, 5.0f, 30.0f };
float[] b = new float[] { 5.0f, 10.0f, 20.0f };

  a   |  b  | Result | Remaining (quantity that cannot be substracted from a)
                                 (b remainder)
--------------------------------
10.0f   5.0f   5.0f     0f
 5.0f  10.0f   0.0f     5f
30.0f  20.0f  10.0f     0f

操作後、Result と Remaining の 2 つのベクトルを取得する必要があります。LINQ と Zip などの関数を使用して効率的に行うにはどうすればよいでしょうか。

前もって感謝します!

編集:私は次のことをしようとしています:

                float[] remainder  = new float[<same lenght of a or b>];
                Result= a
                    .Zip(b, (x, y) =>
                        {
                            remainder[i] = 0;
                            if (y > x)
                            {
                                remainder[i] = y - x;
                                return 0;
                            }
                            else
                            {
                                return x- y;
                            }
                        }).ToArray();

私の問題は、現在の反復のインデックスを取得する方法を知ることです。私の場合、この「i」が使用されていますが、これを達成する方法は?

4

1 に答える 1