c# - 使用时间戳过滤 c# 列表,每 5 秒获取第一条记录

标签 c# list linq

我有一个场景喜欢根据时间过滤记录。那是 5 秒范围内的第一条记录。

示例:

输入数据:

data timings 
1452 10:00:11
1455 10:00:11
1252 10:00:13
1952 10:00:15
1454 10:00:17
1451 10:00:19
1425 10:00:20
1425 10:00:21
1459 10:00:23
1422 10:00:24 

预期输出

1452 10:00:11
1454 10:00:17
1459 10:00:23

我尝试根据如下时间对数据进行分组

 listSpacialRecords=listSpacialRecords.GroupBy(x => x.timings).Select(x => x.FirstOrDefault()).ToList(); 

但是使用这个我只能同时过滤数据。 希望有人能帮我解决这个问题 列表包含大量数据,那么除了循环列表之外还有什么办法吗?

最佳答案

这对我有用:

var results =
    source
        .Skip(1)
        .Aggregate(
            source.Take(1).ToList(),
            (a, x) =>
            {
                if (x.timings.Subtract(a.Last().timings).TotalSeconds >= 5.0)
                {
                    a.Add(x);
                }
                return a;
            });

我得到了你想要的输出。

关于c# - 使用时间戳过滤 c# 列表,每 5 秒获取第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788378/

相关文章:

c# - 如何使用 BackGroundWorker 连续执行依赖于用户输入停止的方法?

列表中的 R 语言函数

sql - 将 LINQ to SQL 与动态表一起使用

c# - 使用 C# Linq 连接行

c# - Linq - 对列表的列表进行操作

c# - 更改已开发的 winform 应用程序的默认大小

c# 4.0 wpf html 解码未正确解码特殊字符 - System.Net.WebUtility.HtmlDecode

list - 对每个列表元素应用谓词

c# - 将 List<int> 转换为逗号分隔值的字符串

c# - Linq 如何在所有值都等于 null 或 0 时获取平均值? MVC