【发布时间】:2012-07-14 00:44:06
【问题描述】:
我有以下:
public class Interval
{
DateTime Start;
DateTime End;
}
我有一个包含多个间隔的List<Interval> 对象。我正在努力实现以下目标(我使用数字使其易于理解):
[(1, 5), (2, 4), (3, 6)] ---> [(1,6)]
[(1, 3), (2, 4), (5, 8)] ---> [(1, 4), (5,8)]
我目前在 Python 中这样做如下:
def merge(times):
saved = list(times[0])
for st, en in sorted([sorted(t) for t in times]):
if st <= saved[1]:
saved[1] = max(saved[1], en)
else:
yield tuple(saved)
saved[0] = st
saved[1] = en
yield tuple(saved)
但我试图在 C# 中实现相同的效果(LINQ 是最好的,但可选)。有关如何有效地做到这一点的任何建议?
【问题讨论】:
-
对于给定的Interval,您是否确保(Start
-
@AndreCalil:是的。我可以保证那个条件。
-
间隔是否总是在原始列表中排序?
-
不。但我想我可以在
List上使用OrderBy来实现这一点。