C#-获取列表中最接近的较大数字

C#-获取列表中最接近的较大数字,c#,algorithm,C#,Algorithm,我有一个未排序的字幕行列表,如下所示: public class SubtitleItem{ public int StartTime { get; set; } //In milliseconds public int EndTime { get; set; } //This too ... } 假设视频的当前位置为1000ms,有三个字幕行,分别从900ms、1200ms和1300ms开始。我要第二条线。因为我无法完全同步视频位置,所以我需要

我有一个未排序的字幕行列表,如下所示:

public class SubtitleItem{
        public int StartTime { get; set; } //In milliseconds
        public int EndTime { get; set; } //This too
        ...
}
假设视频的当前位置为1000ms,有三个字幕行,分别从900ms、1200ms和1300ms开始。我要第二条线。因为我无法完全同步视频位置,所以我需要获得最接近的字幕行,该字幕行在当前视频位置之后开始


注意:我每100毫秒同步一次。

您可以使用Linq进行同步

假设您的字幕位于实现IEnumerable的内容中,并且当前时间位于名为currentTime的变量中,您可以执行以下操作:

var subtitle = (from subtitle in subtitles
                let diff = subtitle.StartTime - currentTime
                where diff > 0
                order by diff).FirstOrDefault();

您可以使用Linq实现这一点

假设您的字幕位于实现IEnumerable的内容中,并且当前时间位于名为currentTime的变量中,您可以执行以下操作:

var subtitle = (from subtitle in subtitles
                let diff = subtitle.StartTime - currentTime
                where diff > 0
                order by diff).FirstOrDefault();
公共子标题项GetNextSubtitle(int currentPosition,列表项)
{
return items.OrderBy(i=>i.StartTime).First(i=>i.StartTime>currentPosition);
}
公共字幕项GetNextSubtitle(int-currentPosition,列表项)
{
return items.OrderBy(i=>i.StartTime).First(i=>i.StartTime>currentPosition);
}

到目前为止,您尝试了什么?添加代码或显示您尝试过的内容可能会帮助您得到答案:)哇,这里有这么多LINQ。所有的排序都是为了得到最小值,这不是最好的算法。而简单的
for
/
foreach
循环将在线性(O(N))时间内执行相同的操作。到目前为止,您尝试了什么?添加代码或显示您尝试过的内容可能会帮助您得到答案:)哇,这里有这么多LINQ。所有的排序都是为了得到最小值,这不是最好的算法。而简单的
for
/
foreach
循环将在线性(O(N))时间内执行相同的操作。
public SubtitleItem GetNextSubtitle(int currentPosition, List<SubtitleItem> items)
{
    return items.OrderBy(i => i.StartTime).First(i => i.StartTime > currentPosition);
}