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);
}