C#实现获取值的范围以及这些范围的并集
我的情况在这个问题中得到了很好的解释:
我需要一个 C# 实现(可能是一个集合),它采用(整数)范围列表并对它们进行并集。 然后我需要迭代这个集合中的所有整数(也是范围之间的数字) 是否有任何库/实现,这样我就不必自己重写所有内容?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以查看此实现,看看它是否满足您的需求。
使用
Range.Coalesce
组合范围:使用
.Iterate
迭代范围:You might take a look at this implementation and see if it will fit your needs.
Combine ranges with
Range.Coalesce
:Iterate over ranges with
.Iterate
:我想到的最简单的事情是使用 Enumerable.Range,然后使用标准 linq 运算符处理不同的 IEnumerable。类似的东西:
显然你也可以使用 Union 和 Intersect...显然你也可以将你的范围放在
List>
或类似的东西中,然后迭代元素以生成单个元素列表:The simplest thing that comes to my mind is to use Enumerable.Range, and then treat the different IEnumerable with standard linq operators. Something like:
Obviously you can use Union and Intersect as well... clearly you can also put your ranges in a
List<IEnumerable<int>>
or something similar and then iterate over the elements for producing a single list of the elements:以下是普通的 Linq 实现:
The following is vanilla Linq implementation:
System.Collections.Generic.HashSet 有这样的东西:
UnionWith(IEnumerable其他)
。修改当前 HashSet 对象以包含其自身、指定集合或两者中存在的所有元素。IntersectWith( IEnumerable other )
。修改当前 HashSet 对象以仅包含该对象和指定集合中存在的元素。System.Collections.Generic.HashSet has just the thing:
UnionWith( IEnumerable<T> other )
. Modifies the current HashSet object to contain all elements that are present in itself, the specified collection, or both.IntersectWith( IEnumerable<T> other )
. Modifies the current HashSet object to contain only elements that are present in that object and in the specified collection.您正在寻找的数据结构称为“区间树”。
您可以在网上找到不同的实现。
例如,这是一个: http://www.emilstefanov.net/Projects/RangeSearchTree.aspx
The data structure you are looking for is called an "interval tree".
You can find different implementations on the net.
For example here's one: http://www.emilstefanov.net/Projects/RangeSearchTree.aspx