c# - 使用 lambda 根据集合中先前的对象值更新集合中的对象
问题描述
我使用了常规代码,但我可以使用 lambda 或 linq 一次性完成。使用 lambda 根据之前的对象值更新集合中的对象
foreach (var city in frontcities)
{
if (first== false)
{
// previous = city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestart;
previous = city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestop;
first = true;
}
else
{
DateTimeOffset ts = DateTimeOffset.FromUnixTimeMilliseconds(previous).AddHours(defaultgap);
int eta = 600;
long start = ts.AddSeconds(eta).ToUnixTimeMilliseconds();
previous = ts.AddSeconds(eta).AddHours(1).ToUnixTimeMilliseconds();
SchduleTime schduleTime = city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault();
schduleTime.Schduletimestop = previous;
schduleTime.Schduletimestart = start;
// city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestart = start;
//city.CitySchduletime.Where(item => item.Schduletimestart == hour).FirstOrDefault().Schduletimestop = previous;
//Caculate Eta betwen next city and this city
}
}
解决方案
我经常定义一个看起来像这样的扩展方法:
public static IEnumerable<(T Previous, T Current)> CurrentAndPrevious<T>(this IEnumerable<T> self)
{
using(var iter = self.GetEnumerator())
{
if (iter.MoveNext())
{
var previous = iter.Current;
while (iter.MoveNext())
{
yield return (previous, iter.Current);
previous = iter.Current;
}
}
}
}
像这样使用
foreach(var (previous, current) in myList.CurrentAndPrevious())
{
...
}
推荐阅读
- javascript - 如何更改滑块的光标?
- javascript - 获取点击了哪个按钮的项目的id reactjs javascript
- c - 如何从 C 中的缓冲区末尾重新读取几个字符?
- python - Pymodbus 服务器 - 捕获写入寄存器的值和地址
- python - 如何在 TIMEOUT 间隔后自动清除 Flask-Caching 的缓存?
- javascript - 即使在使用命名函数时 removeListener 也不起作用
- c++ - 如何在 Mac 上使用 gcc 在 VSC 中编译 C++ 代码?
- jsonpath - 按键未知的值过滤
- java - 从另一个类内部访问一个类的值并改变它们
- html - 我如何在 jQuery 和样式上使用 load() 函数让我的样式起作用