I';我试图用linq来简化一个语句,该语句包含两个数字列表,并从第二个列表中减去第一个

本文关键字:列表 语句 数字 包含两 第一个 第二个 一个 linq | 更新日期: 2023-09-27 17:58:56

我正试图用linq简化一个语句,希望它能更便宜,它包含两个数字列表,并从第二个列表中减去第一个。我有一些有效的东西,但我认为它可以更清洁、更高效。

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},则返回的列表将是{3,3,2}我试过

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

但它显然不起作用。有没有办法把我的函数变成一个漂亮的linq查询?有一件事我不允许,如果列表是两个不同的大小。如果大小不同,则应从末尾修剪较长的列表,使其与较小的列表相同。

如有任何帮助,我们将不胜感激。

谢谢你,

--编辑--

感谢你的帮助,我使用StriplingWarrior的帖子来获得我需要的东西。

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

I';我试图用linq来简化一个语句,该语句包含两个数字列表,并从第二个列表中减去第一个

这应该做:

return _mainPower.Zip(_referencePower,(v1, v2) => v1-v2)