Scala中有范围数据结构吗?

use*_*r_s 3 scala range rangeset

我正在寻找一种处理Scala中范围的方法。我需要做的是:

给定一组范围和一个range(A)返回范围(B),其中range(A)与范围(B)相交不为空

给定一组范围和一个范围(A),从该范围中删除/添加范围(A)。

给定范围(A)和范围(B)创建范围(C)= [min(A,B),max(A,B)]

我在Java中看到了类似的内容-http: //docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/RangeSet.html 虽然subRangeSet仅返回相交值,但不返回集合中的范围(或与其相交的范围列表)。

 RangeSet rangeSet = TreeRangeSet.create();
 rangeSet.add(Range.closed(0, 10));
 rangeSet.add(Range.closed(30, 40));
 Range range = Range.closed(12, 32);
 System.out.println(rangeSet.subRangeSet(range)); //[30,32] (I need [30,40])
 System.out.println(range.span(Range.closed(30, 40))); //[12,40]
Run Code Online (Sandbox Code Playgroud)

Rüd*_*ehn 5

尖顶数学库中有一种Interval[A]类型。这允许使用定义的任意类型范围。边界可以是包含的,排他的或省略的。因此,例如或可能是双精度间隔。Order(-?, 0.0][0.0, 1.0)

这是一个库间隔集,用于处理一组非重叠间隔(IntervalSeqIntervalTrie)以及间隔到任意值的映射(IntervalMap)。

这是一个相关问题,描述了如何将IntervalSeq与DateTime一起使用。

请注意,如果您要使用的类型是64位或更少(基本上是任何原始类型),则IntervalTrie会非常快。请参阅基准