我有一个未排序的字幕行列表,如下所示:
public class SubtitleItem{
public int StartTime { get; set; } //In milliseconds
public int EndTime { get; set; } //This too
...
}
让我们说视频的当前位置是1000毫秒,有三个字幕行从900毫秒,1200毫秒和1300毫秒开始。我想要第二行。由于我无法完美地同步视频位置,因此我需要获得在当前视频位置之后开始的最近的字幕行。
注意:我每100毫秒同步一次。
答案 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);
}