perl模块分割/屏蔽间隔

时间:2014-01-21 17:16:57

标签: perl intervals

我使用Set :: IntervalTree代码来比较两组间隔。但是,我需要一个额外的方法,AFAIK目前尚未在此模块中实现。

我希望有一种方法可以将一个间隔分成两个或更多个。例如:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    <= [Original Interval A]
           rrrrrrrrr                    <= [Interval B to mask against A]
xxxxxxxxxxx         xxxxxxxxxxxxxxxx    <= [Resulting Intervals A1 and A2]

如果使用现有的Perl模块可以实现这一点吗?

编辑:

有关更多信息,每个区间的大小可以是1到10亿(1E9),并且在每个区间集中,区间间隔为1到1百万(1E6)。

1 个答案:

答案 0 :(得分:3)

假设你的间隔需要整数边界,

Set::IntSpan确实需要你想要的东西:

#!/usr/bin/perl -w
use strict;
use Set::IntSpan;

my $A    = new   Set::IntSpan '1-1000000000';
my $B    = new   Set::IntSpan '3-5,10-20,100-200,1000-2000';
my $C    = diff $A $B;

print $C;

返回

  

1-2,6-9,21-99,201-999,2001-1000000000