我正在尝试使用 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));