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.