我希望能够加载一长串正整数范围,并创建一个新的“汇总”范围列表,它是每对范围交叉点的并集。而且,我想在Perl中这样做。例如:
Sample ranges: (1..30) (45..90) (15..34) (92..100)
Intersection of ranges: (15..30)
我能想到的唯一方法是使用一堆嵌套的if
语句来确定样本A,样本B,样本C等的起点,并以这种方式找出重叠,但它不是可以用数百个样本做到这一点,每个样本包含许多范围。
任何建议都表示赞赏!
答案 0 :(得分:5)
当你需要做一些事情时,你应该做的第一件事是看看CPAN,看看有人已经解决了你的问题,可以使用哪些工具。
Set::IntSpan和Set::IntRange位于CPAN上“设置”结果的第一页。
你想要的是每对范围的交集的并集,所以算法如下:
答案 1 :(得分:0)
我没有要共享的代码,但我会将每个范围扩展为哈希,或者使用Set模块,然后对集合使用交集操作。