.NET 相当于 Java 的 TreeSet 操作 tailSet 和 headSet?
我正在尝试使用 .NET 4 的 SortedSet
集合。它似乎拥有我需要的一切,除了一些东西。
问:我希望能够获取与给定值相比更低或更高的所有元素。在Java的TreeSet
中,有名为tailSet
和headSet
的方法,它们执行这些操作。我希望能够对 SortedSet
执行相同的操作。我能找到的最接近的是GetViewBetween
。但是,如果我想将 SortedSet 与 string
一起使用怎么办?据我所知,string
没有最大值,但我需要为该方法指定一个上限和下限。
如何使用 SortedSet
模仿 tailSet
和 headSet
的行为?考虑到 SortedSet
的实现,我认为这些方法非常容易实现。
谢谢!
I'm trying to use .NET 4's SortedSet<T>
collection. It seems to have everything I need minus a couple things.
Q: I want to be able to fetch all elements lower or higher in comparison to a given value. In Java's TreeSet
, there are methods named tailSet
and headSet
, which perform these operations. I'd like to be able to do the same with SortedSet<T>
. The closest I can find is GetViewBetween
. However, what if I wanted to use SortedSet with string
? There is no max value of string
that I know of, yet I need to give the method an upper and lower bounds.
How could I mimic the behavior of tailSet
and headSet
using SortedSet
? Considering the implementation of SortedSet
, I'd think that these would be very easy methods to implement.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我相信你可以像这样模仿他们:
sortedSet.GetViewBetween(start,sortedSet.Max)
sortedSet.GetViewBetween(sortedSet.Min, end)
或者,您可以使用 LINQ:
主要区别在于
GetViewBetween
为您提供一个带有指向原始集合的指针的对象,因此原件中的任何更改都可以反映在副本中。 LINQ 版本根据原始内容创建一个新集,并提供不相互跟踪的副本。当然,您也可以执行类似new SortedSet(set.GetViewBetween(set.Min, end))
的操作来获取克隆行为。I believe you can emulate them like this:
sortedSet.GetViewBetween(start, sortedSet.Max)
sortedSet.GetViewBetween(sortedSet.Min, end)
Alternately, you can use LINQ:
The primary difference is that
GetViewBetween
gives you an object with a pointer to the original set, so any changes in the original set can be reflected in the copies. The LINQ version creates a new set based on the contents of the original, giving copies that don't track each other. Of course, you could also do something likenew SortedSet<T>(set.GetViewBetween(set.Min, end))
to get the cloning behavior.我认为一点 LINQ 可以解决这个问题:
I think a little LINQ may solve the problem: