4

我正在尝试使用 linq 简化并希望更便宜的语句,该语句需要 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;

如果我有 2 个列表 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));
4

1 回答 1

5

这应该这样做:

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