4

私は、linq を使用して単純化しようとしています。うまくいけば、2 つの数値のリストを取り、2 番目のリストから最初のリストを減算するステートメントを安くすることができます。機能するものがありますが、よりクリーンで効率的であると思います。

double[] main = _mainPower.Select(i => i.Decibels).ToArray();
double[] reference = _referencePower.Select(i => i.Decibels).ToArray();

List<double> amplitudeList = new List<double>();
for (int i = 0; i < main.Count(); i++)
{
     if (!double.IsNaN(main[i] - reference[i]))
     {
          amplitudeList.Add(main[i] - reference[i]);
     }
}

 return amplitudeList;

List1 = {8,5,3} と List2 = {5,2,1} という 2 つのリストがある場合、返されるリストは {3,3,2} になります。

return _mainPower.Select(i => i.Decibels - _referencePower.Select(a => a.Decibels));

しかし、明らかに機能しません。関数を素敵な linq クエリに変える方法はありますか? 私が許可していないことの 1 つは、リストが 2 つの異なるサイズである場合です。サイズが異なる場合は、長いリストを最後からトリミングして、小さいリストと同じにする必要があります。

どんな助けでも大歓迎です。

ありがとうございました、

- 編集 -

StriplingWarrior からの投稿を使用して必要なものを入手してくれてありがとう。

_mainPower.Zip(_referencePower, (v1, v2) => v1.Decibels - v2.Decibels).Where(i => !double.IsNaN(i));
4

1 に答える 1

5

これは次のことを行う必要があります。

return _mainPower.Zip(_referencePower,(v1, v2) => v1-v2)
于 2013-02-13T22:06:03.447 に答える