gpt4 book ai didi

c# - 使用 LINQ 从其他两个列表填充单个列表

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:28 26 4
gpt4 key购买 nike

现在,我有 2 个列表(_pumpOneSpm 和 _pumpTwoSpm),它们是数据库查询的结果。现在,我一直在使用 LINQ 来填充列表,供我用于计算。类似这样的东西:

var spmOne = _pumpOneSpm.Where((t, i) => _date[i].Equals(date) &&
DateTime.Compare(_time[i], DateTime.Parse(start)) > 0 &&
DateTime.Compare(_time[i], DateTime.Parse(end)) < 0).ToList();

这很好,因为我一直在从一个列表中提取数据以将特定数据添加到另一个列表中。但是现在,我需要从两个列表中提取数据以添加到一个列表中。我很好奇是否有办法使用 LINQ 执行此操作,或者我是否应该只使用 for 循环进行迭代?这是我使用 for 循环得到的结果:

        for (var i = 0; i < _pumpOneSpm.Count; i++)
{
if (_date[i].Equals(date))
{
if (DateTime.Compare(_time[i], DateTime.Parse(start)) > 0)
{
if (DateTime.Compare(_time[i], DateTime.Parse(end)) < 0)
{
spmOne.Add(_pumpOneSpm[i]);
spmOne.Add(_pumpTwoSpm[i]);
}
}
}
}

这行得通,并且做我想做的。但我只是想让它更高效、更快速。我可以为每个列表使用类似于第一个代码块的两行,但这意味着我要迭代两次。因此,重申一下我的问题,是否可以使用 LINQ 命令同时从两个列表中提取数据以填充另一个列表,还是应该坚持使用 for 循环?感谢您提供的所有帮助。

编辑

我没有提到,使用这些步骤的函数的目的是调整 _pumpOneSpm 和 _pumpTwoSpm 的 MAX。不是每个的最大值,而是它们之间的最大值。因此,最初我将它们添加到一个列表中,然后调用 spmOne.Max()。但是对于上面的两个 LINQ 查询,我正在运行一个 if 语句来比较两个最大值,然后返回两者中的较大者。所以,从技术上讲,它们不需要在一个列表中,我只是认为如果它们在一个列表中会更容易处理。

最佳答案

所以最简单的方法是这样的:

var resultList = list1.Concat(list2).ToList();

请注意,这与您的 for 循环略有不同(项目的顺序不同)。它将包含一个列表中的所有项目,然后是另一个列表中的所有项目,而不是第一个列表中的第一个,第二个列表中的第一个,等等。如果这很重要,您仍然可以使用 LINQ 来完成,但需要一些额外的时间方法调用。

您提到了性能;值得注意的是,在性能方面,您不会比您的 for 循环获得更好的性能。您可以获得更短的代码;代码可读性更强,性能大致相同。尽管在运行时速度方面没有太多改进空间。

同样值得注意的是,您可以将这两种方法结合起来;这甚至不是一个坏主意。您可以使用 LINQ 过滤两个输入序列(使用 Where),然后对结果进行 foreach 以将它们添加到列表中(或使用 AddRange).

var query1 = _pumpOneSpm.Where((t, i) => _date[i].Equals(date) &&
DateTime.Compare(_time[i], DateTime.Parse(start)) > 0 &&
DateTime.Compare(_time[i], DateTime.Parse(end)) < 0);
var query2 = ...
List<T> results = new List<T>(query1);
results.AddRange(query2);

关于c# - 使用 LINQ 从其他两个列表填充单个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com