PDK::Utils::Set - 区间集合操作工具类
SYNOPSIS
use PDK::Utils::Set;
# 创建区间集合
my $set = PDK::Utils::Set->new(1, 5);
$set->addToSet(10, 20);
# 合并区间
$set->mergeToSet(6, 9);
# 打印集合
$set->dump;
# 交集
my $set2 = PDK::Utils::Set->new(4, 15);
my $inter = $set->interSet($set2);
$inter->dump;
# 比较关系
say $set->compare($set2);   # equal / containButNotEqual / belongButNotEqual / other
DESCRIPTION
该模块提供了一个基于区间的集合类,实现了区间的添加、合并、比较、交集等常用操作。
ATTRIBUTES
- mins
 - 
整数数组引用,存储区间集合中每个区间的最小值。
 - maxs
 - 
整数数组引用,存储区间集合中每个区间的最大值。
 
CONSTRUCTOR
- new()
 - 
无参数构造,创建一个空集合。
 - new($setObj)
 - 
传入同类对象,复制其区间。
 - new($MIN, $MAX)
 - 
传入两个整数,创建一个单区间集合。
 - new(%args)
 - 
传入参数哈希,手动指定
mins与maxs。 
METHODS
基础操作
- length()
 - 
返回集合中的区间数量。
 - min()
 - 
返回集合整体的最小值(第一个区间的最小值),若集合为空返回 undef。
 - max()
 - 
返回集合整体的最大值(最后一个区间的最大值),若集合为空返回 undef。
 - dump()
 - 
打印所有区间,格式为 "MIN MAX"。
 
集合构造与合并
- addToSet($MIN, $MAX)
 - 
向集合中插入区间(不检查重叠,需保证输入与现有区间不冲突)。
 - mergeToSet($MIN, $MAX | $setObj)
 - 
向集合中合并区间,若重叠或相邻则会自动合并。
 
集合比较
- compare($setObj)
 - 
比较两个集合的关系,返回以下字符串之一:
equal - 两个集合完全相等
containButNotEqual - 当前集合包含对方但不相等
belongButNotEqual - 当前集合属于对方但不相等
other - 其他关系
 - isEqual($setObj)
 - 
判断集合是否相等。
 - notEqual($setObj)
 - 
判断集合是否不相等。
 - isContain($setObj)
 - 
判断当前集合是否包含另一个集合(包含相等情况)。
 - isContainButNotEqual($setObj)
 - 
判断当前集合是否包含另一个集合但不相等。
 - isBelong($setObj)
 - 
判断当前集合是否属于另一个集合(包含相等情况)。
 - isBelongButNotEqual($setObj)
 - 
判断当前集合是否属于另一个集合但不相等。
 
集合运算
- interSet($setObj)
 - 
返回两个集合的交集,结果为新的集合对象。
 - interRange(\@rangeSet1, \@rangeSet2)
 - 
计算两个区间的交集,返回 (MIN, MAX),若无交集则返回空。
 
ERROR HANDLING
如果
mins与maxs长度不一致,构造函数会抛出异常。如果同一索引的最小值大于最大值,构造函数会抛出异常。
addToSet与mergeToSet方法只允许传入两个整数参数,否则抛出异常。比较方法的参数必须是
PDK::Utils::Set对象,否则抛出异常。
EXAMPLES
use PDK::Utils::Set;
# 创建区间集合
my $set = PDK::Utils::Set->new(1, 5);
$set->addToSet(10, 20);
# 合并区间
$set->mergeToSet(6, 9);
# 打印集合
$set->dump;
# 交集
my $set2 = PDK::Utils::Set->new(4, 15);
my $inter = $set->interSet($set2);
$inter->dump;
# 比较关系
say $set->compare($set2);   # equal / containButNotEqual / belongButNotEqual / other
AUTHOR
WENWU YAN <968828@gmail.com>
LICENSE AND COPYRIGHT
This software is licensed under the same terms as Perl itself.