我使用Set :: IntervalTree代码来比较两组间隔.但是,我需要一个额外的方法,AFAIK目前尚未在此模块中实现.
我想有一个方法将一个间隔分成两个或多个.例如:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx <= [Original Interval A]
rrrrrrrrr <= [Interval B to mask against A]
xxxxxxxxxxx xxxxxxxxxxxxxxxx <= [Resulting Intervals A1 and A2]
Run Code Online (Sandbox Code Playgroud)
如果可以使用现有的Perl模块,任何想法?
编辑:
有关更多信息,每个间隔的大小可以是1到10亿(1E9),并且在每个间隔集中,间隔可以是1到1百万(1E6)个间隔.
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;
Run Code Online (Sandbox Code Playgroud)
回报
1-2,6-9,21-99,201-999,2001-1000000000