c#有十个时间怎么筛选出早于目标时间最近的三个时间和晚于目标时间最近的三个时间 并确定是list中的第几个的
时间: 2024-02-11 16:07:11 浏览: 83
可以使用 LINQ 的 OrderBy 方法将时间按照与目标时间的差值排序,然后选择前三个和后三个时间。代码示例如下:
```csharp
DateTime targetTime = DateTime.Now;
List<DateTime> times = new List<DateTime>();
// 假设 times 中已经有了十个时间
// 获取早于目标时间最近的三个时间
var earlierTimes = times.OrderBy(t => Math.Abs((t - targetTime).Ticks)).Take(3);
// 获取晚于目标时间最近的三个时间
var laterTimes = times.OrderByDescending(t => Math.Abs((t - targetTime).Ticks)).Take(3);
// 确定前三个时间在原来的 List 中的位置
foreach (var time in earlierTimes)
{
int index = times.IndexOf(time);
Console.WriteLine($"早于目标时间的时间:{time},在 List 中的位置:{index}");
}
// 确定后三个时间在原来的 List 中的位置
foreach (var time in laterTimes)
{
int index = times.IndexOf(time);
Console.WriteLine($"晚于目标时间的时间:{time},在 List 中的位置:{index}");
}
```
注意,在获取前三个和后三个时间时,我们使用了 `OrderBy` 和 `OrderByDescending` 方法,并且在其中传入了一个 lambda 表达式,这个表达式计算了目标时间与每个时间之间的差值,然后通过 `Take` 方法选择出前三个和后三个时间。在确定时间在 List 中的位置时,我们使用了 `IndexOf` 方法,该方法返回指定元素在 List 中的索引。