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

时间:2017-04-19 15:56:53

标签: c# algorithm

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

public class SubtitleItem{
        public int StartTime { get; set; } //In milliseconds
        public int EndTime { get; set; } //This too
        ...
}

让我们说视频的当前位置是1000毫秒,有三个字幕行从900毫秒,1200毫秒和1300毫秒开始。我想要第二行。由于我无法完美地同步视频位置,因此我需要获得在当前视频位置之后开始的最近的字幕行。

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

3 个答案:

答案 0 :(得分:1)

您可以使用Linq执行此操作。

假设你的字幕是实现IEnumerable的,而当前时间是名为currentTime的var,你可以这样做:

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

答案 1 :(得分:1)

    var nextSubtitle = subtitles.OrderBy(i=> i.StartTime)
                       .Where(i=> i.StartTime > currentTime).FirstOrDefault();

答案 2 :(得分:0)

public SubtitleItem GetNextSubtitle(int currentPosition, List<SubtitleItem> items)
{
    return items.OrderBy(i => i.StartTime).First(i => i.StartTime > currentPosition);
}