scala - Scala 中是否有范围数据结构?

标签 scala range rangeset

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

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

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

给定 range(A) 和 range(B) 创建一个 range(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]

最佳答案

有一个Interval[A]输入 spire math library .这允许使用定义 Order 的任意类型范围。 .边界可以是包含的、排除的或省略的。所以例如(-∞, 0.0][0.0, 1.0)将是可能的 double 间隔。

这是一个图书馆intervalset用于处理非重叠区间集( IntervalSeqIntervalTrie )以及区间到任意值的映射( IntervalMap )。

这是一个 related question描述了如何将 IntervalSeq 与 DateTime 一起使用。

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

关于scala - Scala 中是否有范围数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36863428/

相关文章:

json - Scala 案例类到 json 模式

scala - ClassNotFoundException:scala.PreDef $问题

python - 如何从Python中的日期字符串生成范围日期?

java - 如何从 Guava 范围类获取正确的字符串

eclipse - Scala Eclipse 文件>new 有<无适用项目>

json - 创建一个通用的 Json 序列化函数

python - 如何使用 Matplotlib 或 python 中的其他库设置轴间隔范围

javascript - 通过滑动 Ranger 元素 slider 来显示元素

c++ - 用于 C++ 的整数区间容器,例如 RangeSet